我对Java中的Prepared Statement有疑问,因为我对此并不了解。
我有一个用例,我必须使用PreparedStatement。但我在编写代码之前只是想:
while(...)
{
if(...)
{
preparedStatement.setString(1, fname);
preparedStatement.setString(2, lname);
...
preparedStatement.addBatch();
}
}
preparedStatement.executeBatch();
让我们考虑上面的代码。有一个while循环可以做一些事情,然后检查一些条件,然后在准备好的声明中添加批处理。
1)所以,我的问题是假设在准备好的陈述中没有添加任何批次,我仍然说executeBatch
。它会给我例外或执行罚款吗?
2)在执行之前是否有任何方法可以检查预备文件中的批次?
感谢。
答案 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
}
基本上测试批次是否没有陈述; - )