2013-03-05 84 views
2

我对Java中的Prepared Statement有疑问,因为我对它不了解太多。如何在executeBatch()之前检查Prepared Statement是否有批处理?

我有,我有在使用PreparedStatement的使用情况。但我只是在写代码前想:

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

让我们考虑上面的代码。有一个while循环会做一些东西,然后检查一些条件,然后在准备好的语句中添加批处理。

1)所以,我的问题是,该批次的假设没有在事先准备好的声明,并将我还是说executeBatch。它会给我例外还是会罚款?

2)是否有检查的PreparedStatement批处理执行前的任何方法?

谢谢。

+0

尝试执行它,看看它说什么! – SudoRahul 2013-03-05 10:16:47

回答

2

它应该只是正常工作,并返回一个空数组。要知道目前添加的批次是否唯一方法是AFAIK,以便自己跟踪它们。

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

+1

你是对的@wds我们应该跟踪它,但我认为应该有像count或hasBatches这样的方法,就像我们可以通过它来了解它有多少声明。感谢您的答复。 :) – 2013-03-05 10:41:03

1

你不必担心处理这个情况。一旦你熟悉了写作的API,你应该期望标准的Javadoc会给你一个throws子句:

抛出:SQLException - 如果发生数据库访问错误,这种方法 被称为在一个封闭的语句或驱动程序不支持批处理 语句。如果发送到数据库的某个命令执行不正确 或尝试返回结果set.SQLTimeoutException - 如果 驱动程序确定由 setQueryTimeout指定的超时值,则抛出BatchUpdateException(SQLException的子类) 方法已经被超过,至少已经试图 取消当前正在运行的声明

而且,如果你是持怀疑态度,考虑返回类型,int[] java.sql.Statement.executeBatch() 期望对象为空的API中,和标准的基元/基类型返回空值或初始化值

随着WDS说,它应该返回一个空的int数组。

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

基本上测试,如果该批次没有声明;-)

+0

虽然这可能会回答这个问题,但仅有代码的答案是令人不悦的。请给OP解释你的答案。 [如何回答](https://stackoverflow.com/help/how-to-answer) – JNYRanger 2017-06-28 18:04:09

相关问题