ユーザーが携帯電話からバッテリーを抜くと、アプリのデータベースが破損する可能性があることを発見しました。これにより、次のようになります。
I / Database(1217):sqliteが返されました:エラーコード= 14、msg=ソース行25467でファイルを開くことができません
E / Database(1217):sqlite3_open_v2( "/ data / data / com.myapp / databases / mydata.db"、&handle、6、NULL)が失敗しました
W / dalvikvm(1217):例外Landroid / database / sqlite / SQLiteException; Lcom / myapp / database/SQLhelperの初期化中にスローされます。
D / AndroidRuntime(1217):VMをシャットダウンします
W / dalvikvm(1217):threadid = 1:キャッチされない例外でスレッドが終了します(group = 0x40015560)
前提
.dumpを使用すると、ユーザーに役立つデータを復元できることを読みました。だから私は次のアプローチを取りました...
実行
final String strDBpath = Application.getContext().getDatabasePath(DB_NAME).getAbsolutePath();
final File fDBsrc = new File(strDBpath);
final File fDBtrgt = new File(strDBpath.replace(".db", "new.db"));
final String strExeCmd = "sqlite3 "+fDBsrc+" .dump | sqlite3 "+fDBtrgt;
boolean bSuccess = true;
try
{
Log.i(TAG, "executing "+strExeCmd);
Process process = Runtime.getRuntime().exec(strExeCmd);
process.waitFor();
} catch (Exception er)
{
bSuccess = false;
}
ただし、結果 -/data/data/com.myapp/databasesを一覧表示しても、新しいデータベースは表示されませんでした。
これは権限の問題ですか?