打开时防止数据库锁定异常

时间:2011-07-16 22:32:14

标签: android

我有一个应用程序,它使用一个包含3个表的数据库。这3个表通过活动和服务读取和写入数据。

得到一些“android.database.sqlite.SQLiteException:数据库被锁定”崩溃后,我进入了数据库适配器类,并使用synchronized语句包装每个写入,更新或删除函数,如下所示:

public int deleteExpiredAlarms() {
    String whereClause = FIELD_EXPIRED + " = 1";

    int val = 0;
    synchronized(dbWriteLock) {
        val = db.delete(ALARM_DATABASE_TABLE, whereClause, null);
    }
    return val;
}

这似乎让它变得更好。但是最近它又变得糟糕了,因为我添加了更多读写不同表的服务。

  1. 我是否需要同步所有数据库访问语句,包括查询?
  2. 尝试通过打开的帮助程序打开可写数据库时发生异常...我是否应同步该行为?
  3. 我听说我应该只使用一个db帮助程序,以便多个线程访问db时不会出现问题。我如何只使用一个db帮助程序?到目前为止,我见过的每个例子都有db helper作为db adapter中的实例化值....所以不会是每个数据库适配器实例化的单独数据库助手(一个在一个活动中,一个在服务运行中,等)
  4. 我已经考虑过使用内容提供商,因为它已被声称可以解决这样的问题,但是如果我应该能够拥有直接数据库,那么它真的比我想做的更多访问没有锁定问题。而且我不打算让其他应用程序访问此数据库。

    感谢您的帮助。

0 个答案:

没有答案