我正在使用 postgres 9.3-1100-jdbc41 JDBC4 驱动程序进行批量插入。
根据 JDBC 规范,其可达
到应用程序以禁用自动提交并提交或
回滚事务。
就我而言,我没有使用任何事务(即自动提交为真),但如果批次中的其中一个插入失败,插入仍然会回滚。
根据 JDBC 规范“如果批量更新中的某个命令无法正确执行,此方法会抛出一个错误
BatchUpdateException,并且 JDBC 驱动程序可能会也可能不会继续处理剩余的命令
这里并没有说回滚之前执行过的命令。
我的理解有错吗?如果不是,为什么驱动程序会这样做,如果是,根据规范什么是正确的行为。
据我所知,该规范基本上将其留给了驱动程序;它不指定如果批处理失败是否提交已处理的工作。
PgJDBC 在事务中执行批处理,因此如果批处理的任何部分失败,则全部将被中止。
如果您觉得这种行为不正确,您需要做的第一件事是编写一个测试用例,证明其他驱动程序始终以与 PgJDBC 不同的方式运行,并将其提交给PgJDBC 问题跟踪器 https://github.com/pgjdbc/pgjdbc/issues。我们没有时间研究其他司机的行为,所以你需要编写测试用例并运行其他一些流行的数据库(MS SQL Server、Oracle、DB2、MySQL 等)或安排让其他人运行它。如果您表明 PgJDBC 的行为与其他驱动程序处理批处理的方式不同,那么值得考虑添加一个选项来更改行为(并努力最终使其成为默认行为)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)