【问题标题】:Android - Database is LockedAndroid - 数据库已锁定
【发布时间】:2011-01-16 17:29:18
【问题描述】:

我有一个可以将数据插入 SQLite 数据库的应用程序。有一个服务线程每六十秒运行一次,检查条件是否为真,并在必要时发出警报。想想“日历”应用程序。

我有很多活动都引用了他们自己的 SQLiteOpenHelper 和他们自己的 SQLiteDatabase 对象。

该应用程序运行良好,但我认为其中一个主要更新应用程序需要一个进度对话框主题 - 这是另一个主题,但如果您能告诉我如何让微调器旋转,那就太好了。但它确实显示。

但要让它显示,我需要把它放在一个线程中。

创建此线程后,我开始在日志中收到大量“数据库已锁定”消息。

我认为这个问题可能与我在后台有一个任务每 60 秒运行一次有关 - 尽管它在视觉上只需要几秒钟来完成更新,所以我将主要的写入事务放置在beginTransaction 块中的更新程序函数。这是我唯一用过的地方。

一切似乎都很好,但后来我开始收到更多关于数据库被锁定的虚假错误。

鼓励我进行一些整理,但似乎在我执行第一次 beginTransaction 之后,我想要进行的任何进一步的数据库修改都失败,并报告数据库已锁定,尽管我确实调用了 db.close。为了安全起见,我什至关闭了数据库助手对象和游标。

我能够清除大多数关于光标仍处于打开状态的警告,例如

E/Database(  678): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here

当一切都被关闭时,我无法弄清楚是什么锁定了数据库。

然后我决定删除使事情稳定的“beginTransaction” - 我现在可以再次浏览我的程序。但我仍然遇到一些随机锁定问题。

E/Database( 1304): Failure 5 (database is locked) on 0x26e5d8 when executing 'INSERT INTO

是否有可能弄清楚是什么锁定了数据库?我可以看到关于锁的抱怨,但看不到锁定它的原因。

像这样处理并发数据库更新/读取的最佳方法是什么?我已经阅读了很多关于同步和 ContentProviders 的内容,但我必须承认,这对我来说有点大。

关于“最佳”做事方式的任何指示?

我可以找出锁定数据库的原因吗?

谢谢 西蒙

【问题讨论】:

  • 嗯,似乎没有人回答你。我有同样的问题,我想知道什么是锁定的,并且能够在我请求 getWritabledatabase() 之前找出锁定状态,可能等到解锁后再发出可写请求。

标签: android sqlite locking


【解决方案1】:

类名扩展 SQLiteOpenHelper

添加:

@Override
public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
      if (!db.isReadOnly()) {
          db.execSQL("PRAGMA foreign_keys=ON;");
          Cursor c = db.rawQuery("PRAGMA foreign_keys", null);
             if (c.moveToFirst()) {
                 int result = c.getInt(0);
             }
             if (!c.isClosed()) {
                    c.close();
             }        
      }
}

【讨论】:

    【解决方案2】:

    您可能希望查看最新版本的 Berkeley DB 作为选项。它提供了与 SQLite3 兼容的 SQL API(以便您的应用程序可以保持不变),并且它提供了更精细的锁定粒度,因此提供了更好的并发性。 Berkeley DB 支持多个并发读写线程同时主动访问数据库。您可以在our website 上找到有关 Berkeley DB 的更多信息。

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2022-07-21
      • 2018-08-17
      相关资源
      最近更新 更多