Android HTC Desire中的数据库锁问题

Android HTC Desire中的数据库锁问题,android,database,concurrency,transactions,locking,Android,Database,Concurrency,Transactions,Locking,在我的应用程序中,一项服务是从服务器获取数据并将其插入表A 如果我转到特定的UI,我需要列出来自另一个表BIf background的数据 操作正在执行,它将生成数据库锁定异常。我有两个数据库 在两个不同的工作台上并行进行操作 它在三星gt15801中运行良好。但htc希望它能生成锁定的数据库 错误 HTC desire-插入过程耗时91秒 三星gt15801-插入过程需要21秒 尝试使用一个SqliteDatabaseHelper并使其成为单个实例。之后,完成操作后,不要关闭SqliteDat

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

如果我转到特定的UI,我需要列出来自另一个
表B
If background的数据 操作正在执行,它将生成数据库锁定异常。我有两个数据库 在两个不同的工作台上并行进行操作

它在三星gt15801中运行良好。但htc希望它能生成锁定的数据库 错误

HTC desire-插入过程耗时91秒

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

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

您可以对数据库实现锁定,请参见

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

database.beginTransaction(); /* for start transaction */
完成对数据库的操作后,您可以使用

database.setTransactionSuccessful();    
database.endTransaction();
但如果在事务之间给出错误,则不要设置
database.setTransactionSuccessful()以便事务将回滚

您还可以在出错时通过
database.inTransaction()检查数据库当前是否处于事务中如果返回true,则您处于事务中,否则您不处于事务中

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

database.isDbLockedByCurrentThread();
database.isDbLockedByOtherThreads();
这将返回布尔值

此外,如果多个线程试图通过以下方式同时读取和写入数据库,您还可以设置是否要锁定数据库:

database.setLockingEnabled(boolean);

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

谢谢你的回复。所以如果我想在数据库上执行并发操作,那么我需要正确地执行锁操作?谢谢。不要使用
IsBlockedByOtherThreads()
,因为它将始终返回false。不再有数据库锁的概念。使用方法插入所需的时间更少,现在只需3秒,而不是91秒