在我的应用程序中,一项服务是从服务器获取数据并将其插入table A
。
如果我转到特定用户界面,我需要列出另一个table B
的数据(如果是背景)
操作是否会产生数据库锁定异常。我有两个数据库
并行操作分别在两个不同的表上完成。
在samsung gt15801中工作正常。但是htc希望它会生成数据库锁定 错误。
HTC欲望 - 插入过程需要91秒。
三星gt15801 - 插入过程需要21秒。
答案 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);
以上删除的方法已弃用,请不要使用。