我发现当用户从手机中取出电池时,应用程序的数据库可能会损坏。这导致:
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):关闭虚拟机
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 并没有显示新的数据库。
这是权限问题吗?