Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Jonny123
1 / 1 / 1
Регистрация: 07.09.2014
Сообщений: 88
#1

Could not open database - Программирование Android

14.05.2015, 20:57. Просмотров 1271. Ответов 3
Метки нет (Все метки)

Здравствуйте, наполнял бд через SqlDatabaseBrowser, подключал к программе с помощью этой статьи http://www.reigndesign.com/blog/usin...-applications/
Код идентичен, вот как вызываю в main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package vodnik.ua.cursovaa;
 
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
 
 
public class MainActivity extends Activity {
    private DataBaseHelper db;
 int id = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        db = new DataBaseHelper(this);
 
        try {
            db.createDatabase();
        } catch (IOException e) {
           throw new Error("Unable to create database");
 
        }
        try {
            db.copyDatabase();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        try {
            db.openDataBase();
        } catch (SQLException e) {
            e.printStackTrace();
        }
 
        File database=getApplicationContext().getDatabasePath("mushrooms.db");
 
        if (!database.exists()) {
            // Database does not exist so copy it from assets here
            Log.i("Database", "Not Found");
        } else {
            Log.i("Database", "Found");
        }
 
 
        ActionBar ab = getActionBar();
        ab.setTitle("Довідник");
        ListView listView = (ListView) findViewById(R.id.lvChapters);
        final String[] mushrooms = {
                "1.Пункт1" ,
                "2.Пункт2",
                "3.Пункт3" ,
                
        };
        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this , android.R.layout.simple_list_item_1 , mushrooms);
        listView.setAdapter(adapter);
 
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MainActivity.this , Information.class);
                intent.putExtra("id" , position);
                intent.putExtra("title" , adapter.getItem(position));
                startActivityForResult(intent , 0);
            }
        });
 
 
    }
 
 
    @Override
    public void onPause() {
        super.onPause();
        db.close();
    }
 
    @Override
    public void onResume() {
        super.onResume();
        try {
            db.openDataBase();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Тестирую на реальном физическом устройстве Nexus 7 2012 , и мне кидает ошибку Error 14 , could not open database
Я знаю даже почему: оно не может создать путь data/data/database, и соответственно не может оттуда открыть базу, но я не вижу где в коде ошибка, где то в методе checkDatabase() (код который из статьи). В логировании проходит что скопирована бд на устройство, но если проверять через file explorer в Android Studio то подпапка не создалась. Прошу помогите найти ошибку

Добавлено через 44 минуты
вот мой лог:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
05-14 20:37:11.391  15373-15373/vodnik.ua.cursovaa I/art﹕ Late-enabling -Xcheck:jni
05-14 20:37:11.519  15373-15373/vodnik.ua.cursovaa I/Database﹕ Новая база данных копируется на устройство!
05-14 20:37:11.525  15373-15373/vodnik.ua.cursovaa I/Database﹕ Новая база данных скопирована на устройство
05-14 20:37:11.551  15373-15373/vodnik.ua.cursovaa I/Database﹕ Found
05-14 20:37:11.767  15373-15391/vodnik.ua.cursovaa I/OpenGLRenderer﹕ Initialized EGL, version 1.4
05-14 20:37:19.248  15373-15383/vodnik.ua.cursovaa I/art﹕ Debugger is no longer active
05-14 20:37:31.207  15373-15383/vodnik.ua.cursovaa I/art﹕ Debugger is no longer active
05-14 20:38:52.322  15373-15385/vodnik.ua.cursovaa W/SQLiteConnectionPool﹕ A SQLiteConnection object for database '/data/data/vodnik.ua.cursovaa/databases/mushrooms.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
05-14 20:39:22.570  15881-15881/vodnik.ua.cursovaa E/SQLiteLog﹕ (14) cannot open file at line 30046 of [9491ba7d73]
05-14 20:39:22.570  15881-15881/vodnik.ua.cursovaa E/SQLiteLog﹕ (14) os_unix.c:30046: (2) open(/data/data/vodnik.ua.cursovaa/databases/mushrooms.db) -
05-14 20:39:22.585  15881-15881/vodnik.ua.cursovaa E/SQLiteDatabase﹕ Failed to open database '/data/data/vodnik.ua.cursovaa/databases/mushrooms.db'.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
            at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
            at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
            at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
            at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
            at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
            at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
            at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
            at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
            at vodnik.ua.cursovaa.DataBaseHelper.checkDataBase(DataBaseHelper.java:58)
            at vodnik.ua.cursovaa.DataBaseHelper.createDatabase(DataBaseHelper.java:36)
            at vodnik.ua.cursovaa.MainActivity.onCreate(MainActivity.java:30)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
05-14 20:39:22.672  15881-15881/vodnik.ua.cursovaa I/Database﹕ Новая база данных копируется на устройство!
05-14 20:39:22.674  15881-15881/vodnik.ua.cursovaa I/Database﹕ Новая база данных скопирована на устройство
05-14 20:39:22.674  15881-15881/vodnik.ua.cursovaa I/Database﹕ Новая база данных копируется на устройство!
05-14 20:39:22.685  15881-15881/vodnik.ua.cursovaa I/Database﹕ Новая база данных скопирована на устройство
05-14 20:39:22.723  15881-15881/vodnik.ua.cursovaa I/Database﹕ Found
05-14 20:39:22.949  15881-15899/vodnik.ua.cursovaa I/OpenGLRenderer﹕ Initialized EGL, version 1.4
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2015, 20:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Could not open database (Программирование Android):

Unknown error (code 14): Could not open database
Подскажите пожалуйста. в чем ошибка, видно что не открывается БД, но из-за чего...

SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
Переношу БД из assets. При первом запуске ловлю это:...

SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type)
Здравствуйте! помогите понять почему подчеркивает DataBase db; пишет...

QSqlQuery::prepare: database not open
делаю удаление с бази даних. выдаёт ошибку delete id 2661 sql error...

Failed: No Such Database Open On Server
При регистрации пользователя через форму регистрации возникает ошибка: Failed:...

QSqlQuery::prepare: database not open
Доброго времени суток. Помогите кто может! if (m_db.isOpen()) { ...

3
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
15.05.2015, 07:51 #2
Такой ти интересный, ошибка в DataBaseHelper, а выклал MainActivity.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
15.05.2015, 08:31 #3
Rube, его код - по ссылке выше.
Jonny123, ссылка уже достаточно старая, я давно не использую всякие чужие библиотеки, только SQLiteAssetHelper, как рекомендует CommonsWare со StackOverflow.
Поэтому не забудьте пройти дебаггером по процедуре createDataBase. Где-то там должна быть ошибка. Уже не помню, какие там есть основные ошибки у авторов. При копировании БД файл не может скопировать в папку. Вспомнил, все эти деятели забывают создать папку перед копированием файла. Олени.
А почему сообщения не на украинском?
0
Jonny123
1 / 1 / 1
Регистрация: 07.09.2014
Сообщений: 88
16.05.2015, 01:03  [ТС] #4
папка assets с файлом бд есть, насчет SQLiteAssetHelper - спасибо , не знал , ошибку в onCreate не замечаю, можете хоть краем глаза пожалуйста глянуть что там не так

Добавлено через 4 часа 28 минут
интересно то что если закрыть эмулятор и перезапустить то ошибки не будет выводить, а вот на реал устройстве Nexus 7 , оно даже не хочет открыть подпапку data может это из - за того что рута нет?

Добавлено через 2 часа 46 минут
проблема решилась добавлением в конструктор проверки и вызова метода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public DataBaseHelper(Context context) {
        super(context, DB_NAME, null, DATABASE_VERSION);
        this.myContext = context;
        boolean dbexist = checkdatabase();
        if (dbexist) {
            //System.out.println("База данных существует");
            try {
                open();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("База данных не существует!");
            createdatabase();
        }
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2015, 01:03
Привет! Вот еще темы с решениями:

cannot perform this operation on an open Database
Есть форма которая для выбранного Алиаса БД при нажатии на кнопку автоматически...

Cannot open database requested by the login
cannot open database requested by the login. the login failed. login failed for...

Sqlite3 unable to open database file
Добрый день. Пытаюсь создать сервис по этому уроку. При выполнении операции...

Ошибка QSqlQuery::exec: database not open
Доброго времени суток. У меня есть несколько справочников, при вызове которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru