谁能解释我为什么会发生以下情况。这是使用 SQLite db 的 Android 应用程序。
- 应用程序将新数据添加到数据库中,这些数据存储在外部存储器中。
- 同时这个外存不可用(比如我挂载到PC上)。
- 当外部存储器再次可用时,我无法以只读模式访问 db。但是,如果我尝试以读写模式打开它,它会顺利进行。为什么?
我编写了代码(如下),它处理了这个问题并且效果很好,但我仍然不明白为什么。
这与剩余的打开连接或类似的东西无关。为了确保,我从设备上完全删除了我的应用程序并重新安装它。但即使在那之后,db 在只读模式下也不可用。db以读写模式打开一次后,下次可能以只读模式打开,没有任何问题。
当我说“不可用”时,我的意思是 db 可以很好地打开,但是对 db 的任何查询都因 IO 错误而失败。
SQLiteDatabase db = SQLiteDatabase.openDatabase(f.getPath(), null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
if (!testQuery(db))
{
Utils.logD("Failed to open db at path: " + f + ". Trying recovering...");
db.close();
db = SQLiteDatabase.openDatabase(f.getPath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
if (!testQuery(db))
{
Utils.logD("Failed to open db at path: " + f + " (noway)");
db.close();
return null;
}
}
Utils.logD("DATABASE OPENED! " + db.hashCode());