首页 > 解决方案 > 发生错误时的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 的正常行为吗?还是我在这里做错了什么?

标签: javapostgresqljdbc

解决方案


推荐阅读