SQLite多插入问题

时间:2012-02-17 14:26:39

标签: sqlite transactions insert

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

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

  

无法在交易中启动交易。

为什么呢?进行多次插入的最有效方法是什么?

1 个答案:

答案 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 driverthe Zentus driver都与使用批处理语句执行控制自动提交模式的用户作斗争。