Java JDBC-Oracle-BatchUpdateException.getUpdateCounts()返回空数组
我正在尝试使用Java JDBC-Oracle-BatchUpdateException.getUpdateCounts()返回空数组,java,oracle,jdbc,prepared-statement,Java,Oracle,Jdbc,Prepared Statement,我正在尝试使用PreparedStatement.executeBatch()执行批处理查询,并尝试捕获BatchUpdateException中发生的任何异常。但是我在调用BatchUpdateException.getUpdateCounts()时得到一个空数组 下面是我的代码: int[] updateCounts = null; PreparedStatement stmt = null; // some logic to set the stmt and create the
PreparedStatement.executeBatch()
执行批处理查询,并尝试捕获BatchUpdateException
中发生的任何异常。但是我在调用BatchUpdateException.getUpdateCounts()
时得到一个空数组
下面是我的代码:
int[] updateCounts = null;
PreparedStatement stmt = null;
// some logic to set the stmt and create the SQL query
try {
if (count % 100 == 0)
{
updateCounts = stmt.executeBatch();
}
} catch (BatchUpdateException bu)
{
updateCounts = bu.getUpdateCounts();
}
在这里,当异常发生时,我得到一个空数组updateCounts
。。。为什么?
注:
BatchUpdateException-
SystemErr R java.sql.BatchUpdateException:ORA-01400:无法
将空值插入(“ABC表”“金额”)
CSV文件,代码从中读取数据。。。第3条记录中应有错误
Asof_Date,Price_Date,Amount
12/15/2015,11/26/2014,-2646.937686
12/15/2015,11/28/2014,5053.611471
12/15/2015,1/22/2015,
12/15/2015,1/23/2015,
根据,每个成功执行的语句的更新计数都会得到一个int,因此空数组表示批处理的第一个语句失败
检索在此异常发生之前成功执行的批处理更新中每个update语句的更新计数
从异常中可以看出,CSV中的空值会导致失败。因此,您要么允许该列为NULL,要么检查是否为NULL,然后插入0
至于updateCounts:如果您的批处理在一个事务中运行(这很有意义),那么所有插入都会在出错时滚动nack-导致什么都没有做。空数组是指长度为0的数组吗?如果是这样,那么很可能是因为您没有向批处理中实际添加任何内容,例如,
count
为0。打印异常可能会产生一些错误insight@Andreas-它有11条记录,即根据Javadoc,计数为11。。。“BatchUpdateException提供在批更新期间成功执行的所有命令的更新计数,也就是说,在错误发生之前执行的所有命令”,我甚至不知道如何使用bu.printStackTrace()打印您的异常并将其发布到您的问题更新答案中,以反映您的新信息。是否有任何方法进行批量插入/更新,并了解单个查询的成功或失败?您能否共享实际语句的代码(编辑问题)?如何填写值等?