我正在为我的Android应用程序使用SQLite,经过一些研究后,我想出了如何使用UNION语句进行多次插入事务。
但这是非常低效的。从我在http://www.sqlite.org/speed.html以及许多其他论坛中看到的内容,我可以使用BEGIN - COMMIT语句加快进程。但是当我使用它们时,我得到了这个错误:
无法在交易中启动交易。
为什么呢?进行多次插入的最有效方法是什么?
答案 0 :(得分:0)
您使用的是哪个JDBC驱动程序?是否只有一个内置于Android发行版中?
问题最有可能是java.sql.Connection#setAutoCommit()
。如果连接已经启用了 auto-commit - 您可以使用Connection#getAutoCommit()
进行检查 - 那么您的JDBC驱动程序已经发出SQL命令以在您手动尝试之前启动事务,使您的手动命令变得冗余且无效。
如果您要控制事务范围,则需要通过调用
为Connection
禁用自动提交模式
connection.setAutoCommit(false);
然后,在您的个人DML语句全部发布后,通过Connection#commit()
或Connection#rollback()
提交或回滚活动交易。
我注意到有些JDBC驱动程序很难用PreparedStatement
与批处理相关的方法协调自动提交模式。特别是,它所基于的the Xerial JDBC driver和the Zentus driver都与使用批处理语句执行控制自动提交模式的用户作斗争。