2012-02-17 141 views
-1

我正在为我的Android应用程序使用SQLite,经过一些研究后,我想出了如何使用UNION语句执行多个插入事务。SQLite多重插入问题

但这是相当低效的。从我在http://www.sqlite.org/speed.html以及许多其他论坛中看到的内容中,我可以使用BEGIN-COMMIT语句加快此过程。但是当我使用它们时,我得到这个错误:

Cannot start a transaction within a transaction.

为什么?多重插入最有效的方法是什么?

+0

看看能否帮到你http://stackoverflow.com/a/8027788/1007273 – hovanessyan 2012-02-17 14:29:16

回答

0

您正在使用哪种JDBC驱动程序?是否只有一个内置于Android发行版的内容?

问题很可能与java.sql.Connection#setAutoCommit()。如果连接已经有自动提交已启用—您可以使用Connection#getAutoCommit() —查看,那么您的JDBC驱动程序已经发出SQL命令来在您手动尝试执行操作之前启动事务,这会使您的手动命令变得冗余且无效。

如果你正在寻找控制事务的程度,你需要禁用通过调用

connection.setAutoCommit(false); 

再后来自动提交模式为Connection,您的个人DML语句已经全部发出后,通过Connection#commit()Connection#rollback()提交或回滚活动事务。

我注意到一些JDBC驱动程序很难协调自动提交模式与PreparedStatement的批处理相关的方法。特别是the Xerial JDBC driverthe Zentus driver,它基于它们都与控制自动提交模式的用户进行对战并且执行批语句。