2012-06-22 1 views
4

Dans mon application, j'ai une copie d'une base de données SQLite dans mon dossier d'actifs. Pour autant que je sache, ça fonctionne bien. Lorsque mon application installe pour la première fois dans mon émulateur, je reçois une erreur comme ceci:Obtention d'une exception 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) 

Voici mon code initial pour ouvrir la base de données:

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

Voici une autre méthode que j'ai essayé:

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

J'ai aussi essayé d'utiliser ceci:

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

Des suggestions sur la façon de résoudre ce problème?

+0

voir ce message peut-être utile http://stackoverflow.com/questions/8151147/failed-to-open-database-in-android-app –

+0

déjà essayé celui-ci –

+0

Salut Chiru, Avez-vous recopié votre base de données? pouvons-nous voir cette partie du code où vous copiez le db du chemin –

Répondre

2

je suis toujours sous l'étape de copier ma base de données à partir des actifs dossier:

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(); 
} 

Une fois copié je vérifierai comme ci-dessous:

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

j'ai obtenu cette exception après l'ajout de votre code SQLiteCantOpenDatabaseException: impossible d'ouvrir le fichier de base de données –

+0

Pouvez-vous coller le journal ici? –

+0

veuillez le vérifier une fois que j'ai ajouté le journal –

1

Je vais avoir un problème similaire, la différence étant que la base de données fonctionne dans mon émulateur Eclipse Nexus 7 mais pas sur le Nexus 7 lui-même. J'ai téléchargé Questoid pour pouvoir voir ce qu'il y a dans ma base de données après l'avoir copié depuis le dossier des assets mais depuis un certain temps, la base de données n'apparaissait même pas dans l'explorateur de fichiers. J'ai continué à faire la copie et finalement il est apparu. Ayant passé par le même processus plusieurs fois, je n'ai pas encore été capable de comprendre quel est le dénominateur commun, mais la répétition semble être la clé dans mon cas. Maintenant, je dois encore comprendre pourquoi mon Nexus 7 lui-même ne peut pas ouvrir la base de données lorsque j'installe l'application sur l'appareil. Je rencontre la même exception, mais seulement sur l'appareil lui-même.

Questions connexes