java - 发生错误时的PostgreSQL JDBC驱动回滚批量查询
问题描述
我正在使用 JDBC postgresql 驱动程序。向数据库发送批量查询时,postgres 驱动程序在发生错误时回滚所有内容,结果是仅包含 Statement.Execute_FAILED 的数组。
try (Connection connection = getConnection();
PreparedStatement stmt = connection.prepareStatement(UPSERT_THESIS)) {
for (SomeObject d : data) {
stmt.setString(1, d.getId());
stmt.setString(2, d.getName());
stmt.addBatch();
}
int[] result = stmt.executeBatch();}
我得到了结果 [-3,-3,-3]。自动提交是否打开/关闭都没有关系。
使用其他数据库时,如Mysql,没有回滚,每条语句都被处理并保存在数据库中,除了发生错误的语句。所以我得到了混合 Statement.Success_NOINFO 和 Statement.Execute_FAILED ([1,1,-3,1]) 的结果数组。
这是 postgres jdbc 的正常行为吗?还是我在这里做错了什么?