在JDBC中的单个语句对象上使用batchExecute和execute方法

时间:2017-12-11 07:53:22

标签: java sql postgresql jdbc

我遇到了一段旧代码,如下所示

Statement stmt = connection.createStatement();
stmt.addBatch(insertQuery);
stmt.addBatch(insertQuery);
stmt.addBatch(insertQuery);
stmt.addBatch(insertQuery);

//there is some data which needs to be deleted before inserting the new data. 
stmt.execute(deleteQuery);
stmt.executeBatch();

这里我们正在批处理一些查询,在执行批处理之前,这段代码正在执行其他一些删除查询,然后执行批处理。

这样做是否合法?

上述代码是否会按预期工作,它将首先执行删除查询,然后执行批量更新?

1 个答案:

答案 0 :(得分:0)

JDBC specification(版本4.3)说:

  

方法的行为executeQueryexecuteUpdate和   当execute批处理时,statement是实现定义的   非空。

换句话说,行为未指定并且取决于驱动程序实现,这意味着不应该依赖它。

快速(但不彻底)扫描pgjdbc源似乎表明PostgreSQL驱动程序确实允许您首先向批处理添加语句,执行单个语句,然后执行批处理。

但是在显示的代码中,我建议首先执行删除查询,然后才填充并执行批处理。对于不熟悉代码的人来说,阅读这个命令要简单得多。