2017-09-19 8 views
1

SQLiteのDB Browserで作成されたプリロードされた.dbファイルを、Codename Oneで作成されたアプリケーションにコピーしようとしています。私は、(データの下で)私のsrcフォルダとtheme.resフォルダにアプリを配置しているし、私のアプリの開口クラスの私のinit()方法に次のコードを追加しました:sqlite dbファイル(シミュレータとデバイス)を読み込むときに、コードネーム1のエラーを解決する方法は?

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は、変数を返します。この問題を解決する方法について

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

任意のアイデア:私はこのメッセージを取得し、私のAndroidデバイス

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

シミュレータを実行しているとき、私は、このエラーメッセージが表示されますか?

ありがとうございます!

+0

「UCSConstantsAndCommons.DB」と「UCSConstantsAndCommons.DB_PATH」の値はそれぞれ –

+0

「mydb.db」と「/mydb.db」です。私は上記の変更を行った。 – Schreiby

答えて

0

私は変数の値が間違っていると推測して、間違った結果をもたらします。これはシミュレータ上で発生するので、デバッグは非常に簡単です。ユーザーのホームディレクトリの.cn1ディレクトリの下にあるファイルが正しいことを確認してください。

+0

私はそのフォルダをチェックすると、空の 'localstorage'フォルダと' .lock'ファイルしか持っていません。私のDBはどこに行きましたか? – Schreiby

+0

これは、ファイルが場所にコピーされなかったことを意味します。それは、おそらくバグだデータベースのディレクトリが失われている可能性があります。 '.cn1'ディレクトリに' database'フォルダを作成し、もしこれを修正する必要があれば、これを回避するかどうか確認してください。私は 'getDatabasePath'というものが存在しない場合、そのディレクトリを暗黙的に作成しなければなりません。 –

+0

ありがとう@Shai Almog。私のケースでは、Sqlite Browserでdbファイルを開こうとしましたが、データベースが不正であるというメッセージが表示されました。これは、シミュレータで実行しようとしたときと同様です。そのdbファイルを代替ファイルに置き換えてsrcフォルダに置き、コード内のファイル名を置き換えたとき、それはうまくいきました。 – Schreiby

関連する問題