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)
以上删除的方法已弃用,请不要使用.
| 归档时间: |
|
| 查看次数: |
4993 次 |
| 最近记录: |