Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Jonny123
1 / 1 / 0
Регистрация: 07.09.2014
Сообщений: 88
#1

Could not open database - Android

14.05.2015, 20:57. Просмотров 695. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2015, 20:57     Could not open database
Посмотрите здесь:

Android Open Street Map navigation
Open file dialog Android
Android Исходники напоминалки open-source
Android Создание движущегося объекта (open gl)
DataBase и ViewPage Android
Разница в загрузке Android от Open GL и canvas Android
Знакомство с OPEN GLES Android
SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type) Android
Android Unknown error (code 14): Could not open database
Ошибка: open failed: ENOENT (No such file or directory) Android
Android Не происходит BackUp DataBase SQLite
Open Project Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
15.05.2015, 07:51     Could not open database #2
Такой ти интересный, ошибка в DataBaseHelper, а выклал MainActivity.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
15.05.2015, 08:31     Could not open database #3
Rube, его код - по ссылке выше.
Jonny123, ссылка уже достаточно старая, я давно не использую всякие чужие библиотеки, только SQLiteAssetHelper, как рекомендует CommonsWare со StackOverflow.
Поэтому не забудьте пройти дебаггером по процедуре createDataBase. Где-то там должна быть ошибка. Уже не помню, какие там есть основные ошибки у авторов. При копировании БД файл не может скопировать в папку. Вспомнил, все эти деятели забывают создать папку перед копированием файла. Олени.
А почему сообщения не на украинском?
Jonny123
1 / 1 / 0
Регистрация: 07.09.2014
Сообщений: 88
16.05.2015, 01:03  [ТС]     Could not open database #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();
        }
    }
Yandex
Объявления
16.05.2015, 01:03     Could not open database
Ответ Создать тему
Опции темы

Текущее время: 07:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru