2012-06-22 2 views
4

В моем приложении у меня есть копия базы данных SQLite в папке с моими ресурсами. Насколько я знаю, он работает нормально. Когда мое приложение устанавливается в первый раз в эмуляторе, я получаю ошибку следующим образом:Получение SQLiteCantOpenDatabaseException

Failed to open the database. Closing it. 

android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file 
E/SQLiteDatabase(7516): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 
E/SQLiteDatabase(29308): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013) 
E/SQLiteDatabase(29308): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986) 
E/SQLiteDatabase(29308): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962) 
E/SQLiteDatabase(29308): at com.guayama.database.URLDatabaseHelper.checkDBExists(URLDatabaseHelper.java:86) 
E/SQLiteDatabase(29308): at com.guayama.database.URLDatabaseHelper.createURLDB(URLDatabaseHelper.java:54) 
E/SQLiteDatabase(29308): at com.guayama.database.URLDatabaseHelper.<init>(URLDatabaseHelper.java:38) 

Вот мой исходный код, чтобы открыть базу данных:

SQLiteDatabase.openDatabase(mPath, null,SQLiteDatabase.CREATE_IF_NECESSARY); 

Вот еще один метод, который я пытался:

checkDB = SQLiteDatabase.openDatabase(mPath, null, 
       SQLiteDatabase.OPEN_READONLY); 

Я также попытался использовать это:

SQLiteDatabase.openDatabase(mPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

Любые предложения по решению этой проблемы?

+0

см. Это сообщение возможно полезно http://stackoverflow.com/questions/8151147/failed-to-open-database-in-android-app –

+0

уже пробовал этот –

+0

Hi Chiru, скопировали ли вы свою базу данных? мы можем увидеть ту часть кода, в которой вы копируете db из пути –

ответ

2

Я всегда следовать ниже шаг, чтобы скопировать свою базу данных из папки активов:

private void copyDatabase() throws IOException{ 

     InputStream inputStream = context.getAssets().open(DB_NAME); 
     String dbCreatePath = DB_PATH+DB_NAME; 
     OutputStream outputStream = new FileOutputStream(dbCreatePath); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while((length = inputStream.read(buffer))>0){ 
      outputStream.write(buffer,0,length); 
     } 
     outputStream.flush(); 
     outputStream.close(); 
     inputStream.close(); 
} 

После того, как он будет скопирован я проверю, как показано ниже:

private boolean checkDatabase(){ 
    SQLiteDatabase checkDB = null; 
    try { 
     String dbPath = DB_PATH+DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(dbPath, null,  
      SQLiteDatabase.OPEN_READWRITE); 
    } catch (SQLiteException e) { 
     // TODO: handle exception 
    } 
    if(checkDB!=null){ 
     checkDB.close();} 
    return checkDB != null ? true:false; 

} 
+0

, я получил это исключение после добавления ur кода SQLiteCantOpenDatabaseException: не удалось открыть файл базы данных –

+0

Можете ли вы вставить здесь Log? –

+0

, пожалуйста, проверьте его, как только я добавил журнал –

1

У меня аналогичная проблема, то разница в том, что база данных работает в моем эмуляторе Eclipse Nexus 7, но не на самом Nexus 7. Я загрузил Questoid, чтобы узнать, что находится в моей базе данных после того, как я скопировал его из папки с ресурсами, но некоторое время база данных даже не отображалась в Проводнике. Я продолжал делать копию, и, наконец, она появилась. Пройдя один и тот же процесс несколько раз, я еще не смог понять, что такое общий знаменатель, но повторение, похоже, является ключевым в моем случае. Теперь мне еще нужно выяснить, почему мой Nexus 7 сам не может открыть базу данных, когда я устанавливаю приложение на устройство. Я испытываю одно и то же исключение, но только на самом устройстве.