我正在使用JDBC postgresql驱动程序。当向数据库发送批处理查询时,发生错误并且结果仅是使用Statement.Execute_FAILED的数组时,postgres驱动程序会回滚所有内容。
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是否正常?还是我在这里做错了什么?