2017-09-19 4 views
1

J'essaie de copier un fichier .db préchargé créé par DB Browser pour SQLite à mon application faite dans Codename One. Je l'ai placé l'application dans mon dossier src et le dossier theme.res (sous Données) et ont ajouté le code suivant dans ma méthode init() de la classe d'ouverture de mon application:Comment résoudre les erreurs dans Codename One lors du chargement du fichier sqlite db (simulateur & périphérique)?

String path = Display.getInstance().getDatabasePath("mydb.db"); 

    Log.p("init path = " + path); 
    FileSystemStorage fs = FileSystemStorage.getInstance(); 

    if(path != null && !fs.exists(path)) { 
     Log.p("path != null "); 
     try (OutputStream os = fs.openOutputStream(path); 
     InputStream is = Display.getInstance().getResourceAsStream(getClass(), "/mydb.db"); 
      ) { 
      Util.copy(is, os); 
     } catch (IOException err) { 
      Log.e(err); 
      //copyDb(path); 
     } 
    } 

path retourne une variable. Lors de l'exécution du simulateur , je reçois ce message d'erreur:

java.sql.SQLException: [SQLITE_CORRUPT] The database disk image is malformed (database disk image is malformed) 

Sur mon appareil Android Je reçois ce message:

Exception: android.database.sqlite.SQLiteException - no such table: 

Toutes les idées sur la façon de résoudre ce problème?

Merci!

+0

Quelles sont les valeurs de 'UCSConstantsAndCommons.DB' &' UCSConstantsAndCommons.DB_PATH' –

+0

"mydb.db" et "/mydb.db" respectivement. J'ai fait ces changements ci-dessus. – Schreiby

Répondre

0

Je suppose que les valeurs des variables sont incorrectes et produisent un mauvais résultat. Comme cela arrive sur le simulateur, il est assez facile de déboguer. Vérifiez simplement que le fichier est correct dans le répertoire .cn1 de votre répertoire personnel.

+0

Lorsque je vérifie ce dossier, je n'ai qu'un dossier 'localstorage' vide et un fichier' .lock'. Où est passé mon db? – Schreiby

+0

Cela signifie que le fichier n'a pas été copié en place. C'est peut-être parce que le répertoire de base de données est manquant, auquel cas c'est probablement un bug. Créez le dossier 'base de données' dans le répertoire' .cn1' et voyez si cela fonctionne autour de cela, si c'est le cas, nous devons corriger cela. Je pense que 'getDatabasePath' devrait implicitement créer ce répertoire s'il n'existe pas –

+0

Merci @Shai Almog. Dans mon cas, j'ai essayé d'ouvrir mon fichier db dans Sqlite Browser et j'ai reçu un message indiquant que la base de données était mal formée, similaire à celle que j'ai vue en essayant de la faire passer par le simulateur. Lorsque j'ai remplacé ce fichier db par un autre, placé dans le dossier src et remplacé le nom de fichier dans mon code, il a heureusement travaillé. – Schreiby