HTC Desire中的数据库锁定问题

时间:2011-08-05 04:37:20

标签: android database concurrency transactions locking

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

如果我转到特定用户界面,我需要列出另一个table B的数据(如果是背景)       操作是否会产生数据库锁定异常。我有两个数据库        并行操作分别在两个不同的表上完成。

在samsung gt15801中工作正常。但是htc希望它会生成数据库锁定        错误。

  

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

     

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

1 个答案:

答案 0 :(得分:14)

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

您可以为数据库实现锁定,请参阅

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);

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