如何在executeBatch()之前检查Prepared Statement是否有一些批次?

时间:2013-03-05 10:15:21

标签: java jdbc prepared-statement

我对Java中的Prepared Statement有疑问,因为我对此并不了解。

我有一个用例,我必须使用PreparedStatement。但我在编写代码之前只是想:

while(...)
{
   if(...)
   {
     preparedStatement.setString(1, fname);
     preparedStatement.setString(2, lname); 
      ...
     preparedStatement.addBatch();
   }
}
preparedStatement.executeBatch();

让我们考虑上面的代码。有一个while循环可以做一些事情,然后检查一些条件,然后在准备好的声明中添加批处理。

1)所以,我的问题是假设在准备好的陈述中没有添加任何批次,我仍然说executeBatch。它会给我例外或执行罚款吗?

2)在执行之前是否有任何方法可以检查预备文件中的批次?

感谢。

3 个答案:

答案 0 :(得分:2)

它应该工作正常并返回一个空数组。了解当前是否添加了批次的唯一方法AFAIK,就是自己跟踪它们。

另一方面,如果您只想知道实际执行了多少语句,那么您可以使用返回的更新计数数组来检查运行了多少查询,以及个人如果他们成功的话,在其中看到每个人的价值观。有关详细信息,请参阅executeBatch()的文档。

答案 1 :(得分:1)

您无需担心处理此案例。一旦你熟悉编写API,你应该期望javadoc会给你一个抛出条款的标准:

  

抛出:SQLException - 如果发生数据库访问错误,则此方法   在关闭的Statement上调用,或者驱动程序不支持批处理   声明。抛出BatchUpdateException(SQLException的子类)   如果发送到数据库的其中一个命令无法正常执行   或者尝试返回结果集.SQLTimeoutException - 当时   驱动程序已确定由指定的超时值   已超出setQueryTimeout方法并至少尝试过   取消当前运行的Statement

此外,如果您持怀疑态度,请考虑返回类型int[] java.sql.Statement.executeBatch() 期望API在API中为null,并且标准基元/基类型返回空值或初始化值

正如WDS所说,它应该返回一个空的int数组。

答案 2 :(得分:0)

if(preparedstatement.executeBatch().length == 0){
//do somethimg
}

基本上测试批次是否没有陈述; - )