从java中的executeBatch返回的PostgreSQL结果集

时间:2017-09-14 07:05:05

标签: java postgresql prepared-statement

我正在尝试插入一个没有批处理执行的值将返回我在查询中提到的值,但它在批处理执行中不起作用。它只返回状态为1或0的整数数组。下面给出了示例代码。

Connection connection = ConnectionManager.getInstance().getDBConnection();

        String query = "insert into custom_attribute_mapping (product_id,attribute_id,attribute_values) values (49,22,'yyyyyyyyyyyyy') RETURNING attribute_mapping_id";

        try (PreparedStatement prepStmt2 = connection
                .prepareStatement(query )) {
            int i =0;       
            ResultSet rs = prepStmt2.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getInt(1));

            }
        } catch (Exception e) {

        }

在上面的代码中,我得到了attribute_mapping_id的值。但是在下面的代码中,executeBatch的返回类型是一个整数数组,它只有插入状态。

Connection connection = ConnectionManager.getInstance().getDBConnection();

    String query = "insert into custom_attribute_mapping (product_id,attribute_id,attribute_values) values (49,22,'yyyyyyyyyyyyy') RETURNING attribute_mapping_id";

    try (PreparedStatement prepStmt2 = connection
            .prepareStatement(query )) {
        int i =0;
        while(i<5){
            i++;
            prepStmt2.addBatch();
        }           
        int[] rs = prepStmt2.executeBatch();
        for(int r:rs){
            System.out.println(r);
        }

    } catch (Exception e) {

    }

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

使用executeBatch()时,您无法获取生成的值。它只会返回更新计数,即使那些也不是clearly defined

  

executeBatch方法返回的数组中的元素可能是   以下之一:

     

大于或等于零的数字 - 表示该命令   已成功处理,是一个更新计数给出的数量   数据库中受命令执行

影响的行      

值SUCCESS_NO_INFO - 表示已处理该命令   已成功但受影响的行数未知

     

如果其中之一   批量更新中的命令无法正确执行,此方法   抛出BatchUpdateException,JDBC驱动程序可能会也可能不会   继续处理批处理中的其余命令。然而   驱动程序的行为也必须与特定的DBMS一致   始终继续处理命令或永远不会继续处理   命令。如果驱动程序在发生故障后继续处理,则   由BatchUpdateException.getUpdateCounts方法返回的数组   包含与批处理中的命令一样多的元素,以及   至少有一个元素如下:

     

值EXECUTE_FAILED - 表示命令失败   成功执行并仅在驱动程序继续处理时发生   命令失败后的命令