Java 如何在批处理中获取包含异常的精确sql查询

Java 如何在批处理中获取包含异常的精确sql查询,java,sql,exception-handling,batch-processing,sqlexception,Java,Sql,Exception Handling,Batch Processing,Sqlexception,我要执行以下操作: (从处理数据库的提取行传输到行的表示数据库) 因此,我可以看到有无任何错误的更改,但看起来BatchUpdateException不起作用?引用BatchUpdateException的javadoc: 数组中元素的顺序 更新计数与订单相对应 其中命令被添加到 一批 在批处理更新中的命令之后 未能正确执行,并且 引发BatchUpdateException时 驾驶员可以继续驾驶,也可以不继续驾驶 处理中的其余命令 一批。如果司机继续 处理失败后,阵列 由方法返回 BatchU

我要执行以下操作:

(从处理数据库的提取行传输到行的表示数据库)


因此,我可以看到有无任何错误的更改,但看起来BatchUpdateException不起作用?

引用BatchUpdateException的javadoc:

数组中元素的顺序 更新计数与订单相对应 其中命令被添加到 一批

在批处理更新中的命令之后 未能正确执行,并且 引发BatchUpdateException时 驾驶员可以继续驾驶,也可以不继续驾驶 处理中的其余命令 一批。如果司机继续 处理失败后,阵列 由方法返回 BatchUpdateException.getUpdateCounts 每个命令都有一个元素 在批处理中,而不是仅在元素中 对于执行的命令 在错误发生之前,已成功执行。在 司机继续驾驶的情况 处理命令,数组元素 对于任何失败的命令 语句。执行失败


如前所述,您只能访问批处理过程中失败的SQL语句的索引。这意味着,为了重新创建无法执行的同一语句,您应该以可索引的方式存储参数,例如:

List<...>paramList = new ArrayList<...>();
for (... params in paramList) {
    stmt.clearParameters();
    stmt.setString(...something involving params...);
    // etc.
}
ListparamList=newarraylist();
对于(…参数列表中的参数){
stmt.clearParameters();
stmt.setString(…涉及参数的某物…);
//等等。
}

这样,带有
EXECUTE\u FAILED
数组的
getUpdateCounts
索引可用于识别导致失败的参数。

创建一个有助于执行命令的DB层,如果sql命令失败,请使用while循环或其他方法重试几次,如果在几次之后仍然失败,那么记录它。

我正在mysql中使用mysql-connector-java-3.1.14。本主题顶部的更新(使用BatchUpdateException和getUpdateCounts)工作正常。现在,我可以在batch insert/update中找到有问题的行。

您好,感谢您的即时回复,我已经更新了我的问题,希望您能为此输入任何信息,谢谢!
        public static void processUpdateCounts(int[] updateCounts) {
            for (int i=0; i<updateCounts.length; i++) {
                if (updateCounts[i] >= 0) {
                    // Successfully executed; the number represents number of affected rows
                    logger.info("Successfully executed: number of affected rows: "+updateCounts[i]);
                } else if (updateCounts[i] == Statement.SUCCESS_NO_INFO) {
                    // Successfully executed; number of affected rows not available
                    logger.info("Successfully executed: number of affected rows not available: "+updateCounts[i]);
                } else if (updateCounts[i] == Statement.EXECUTE_FAILED) {
                    logger.info("Failed to execute: "+updateCounts[i]);
                    // Failed to execute
                }
            }
        }
        processUpdateCounts(updateCounts);
List<...>paramList = new ArrayList<...>();
for (... params in paramList) {
    stmt.clearParameters();
    stmt.setString(...something involving params...);
    // etc.
}