任何人都可以解释为什么会发生以下情况。这是使用SQLite数据库的Android应用程序。
我编写了代码(下面),它处理了这个问题并且运行良好,但我仍然不理解为什么。
NOT 与剩余的开放式连接或此类内容相关。为了确保,我完全从设备中删除了我的应用程序并重新安装它。但即便如此,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());
答案 0 :(得分:1)
如果在事务仍处于活动状态时数据库不可用,则必须在DB再次处于一致状态之前回滚此事务。此回滚需要写访问权限。
这意味着只有在永远不会更改数据库时才应该以只读模式打开数据库。