【问题标题】:database lock issue in HTC DesireHTC Desire 中的数据库锁定问题
【发布时间】:2011-10-20 13:24:48
【问题描述】:

在我的应用程序中,一项服务正在从服务器获取数据并将其插入到table A

如果我进入特定的 UI,我需要列出来自另一个 table B 的数据(如果是背景) 操作正在做它会产生数据库锁定异常。我有两个数据库 操作在两个不同的表上并行完成。

在三星 gt15801 上运行良好。但是HTC希望它会生成数据库锁定 错误。

HTC 渴望 - 插入过程需要 91 秒。

三星 gt15801 - 插入过程需要 21 秒。

【问题讨论】:

  • 使用this 方法插入的时间更短,现在只需 3 秒而不是 91 秒

标签: android database concurrency transactions locking


【解决方案1】:

尝试使用一个SqliteDatabaseHelper并使其成为单个实例。之后完成操作后不要关闭SqliteDatabase实例

您可以为此在数据库上实施锁定

http://www.sqlite.org/lockingv3.html

当你启动一个有很多并发操作的数据库操作时,你必须使用

database.beginTransaction(); /* for start transaction */

完成对数据库的操作后,您可以使用

database.setTransactionSuccessful();    
database.endTransaction();

但是如果你在事务之间给出错误,那么不要设置database.setTransactionSuccessful();,这样事务就会回滚。

你也可以在出错的时候通过database.inTransaction();检查当前数据库是否在事务中,如果它返回true那么你在事务中,否则你不在事务中

也可以调用

来检查当前数据库是否被锁定
database.isDbLockedByCurrentThread();
database.isDbLockedByOtherThreads();

这将返回布尔值。

如果多个线程同时尝试读取和写入您的数据库,您还可以设置是否要锁定您的数据库

database.setLockingEnabled(boolean);

以上删除的方法已弃用,请勿使用。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多