HTC Desire中的数据库锁定问题

Dro*_*Bot 3 database concurrency android locking transactions

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

如果我去特定的UI,我需要列出来自另一个的数据,table B如果后台操作正在执行它将生成数据库锁定异常.我在两个不同的表上并行完成了两个数据库操作.

它在三星gt15801中工作正常.但是htc希望它会产生数据库锁定错误.

HTC的愿望 - 插入过程需要91秒.

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

Dha*_*dra 14

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

你可以为数据库实现锁定,看看这个

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

当您启动具有许多并发操作的数据库操作时,您必须使用

database.beginTransaction(); /* for start transaction */
Run Code Online (Sandbox Code Playgroud)

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

database.setTransactionSuccessful();    
database.endTransaction();
Run Code Online (Sandbox Code Playgroud)

但是如果在事务之间给出错误,则不要设置为database.setTransactionSuccessful();使事务回滚.

您还可以在出现错误时检查当前数据库是否处于事务处理状态,database.inTransaction();如果它返回true,那么您处于事务处理中,否则您不处于事务处理中

您还可以通过调用来检查当前数据库是否已锁定

database.isDbLockedByCurrentThread();
database.isDbLockedByOtherThreads();
Run Code Online (Sandbox Code Playgroud)

这将返回布尔值.

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

database.setLockingEnabled(boolean);
Run Code Online (Sandbox Code Playgroud)

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