[英]Cannot perform operation because there is no current transaction when inserting into database
在我的Android应用程序中,我必须将数据插入来自不同线程的几个SQLite表中(一个线程用于插入一个表,并且有5个表)。 有很多数据所以我使用beginTransaction()
- > setTransactionSuccessful()
- > endTransaction();
在每个线程和所有线程同时启动,但在第二个或有时是第三个线程我总是得到这个异常:
我使用的是作为单一的SQLite连接(单) 这里所说但无论如何这个问题remains.So我事先希望一些help.Thanks!
PS如果我有竞争条件,我应该用什么方式进行多线程插入?
我认为你的问题是竞争条件。 由于您有多个线程开始和结束事务,您可能会得到类似以下操作:
beginTransaction()
// this may be a noop because a transaction is already open
beginTransaction()
setTransactionSuccessful()
setTransactionSuccessful()
endTransaction()
// this may throw because the previous end closes the transaction
endTransaction()
我不认为Sqlite支持在单个连接上打开多个事务,正如您所指出的,多个连接是不可能的。
如果事务的目标是加速数据,那么您将不得不更改体系结构而不是从多个线程写入。 您可以使用某种实用程序类来执行已synchronized
的实际数据库更新,以便所有线程调用,并决定何时打开或关闭事务。 另一个想法是让一个线程执行数据库操作,所有其他线程写入与写入线程共享的BlockingQueue
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.