我遇到了一段旧代码,如下所示
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();
这里我们正在批处理一些查询,在执行批处理之前,这段代码正在执行其他一些删除查询,然后执行批处理。
这样做是否合法?
上述代码是否会按预期工作,它将首先执行删除查询,然后执行批量更新?
答案 0 :(得分:0)
JDBC specification(版本4.3)说:
方法的行为
executeQuery
,executeUpdate
和 当execute
批处理时,statement
是实现定义的 非空。
换句话说,行为未指定并且取决于驱动程序实现,这意味着不应该依赖它。
快速(但不彻底)扫描pgjdbc源似乎表明PostgreSQL驱动程序确实允许您首先向批处理添加语句,执行单个语句,然后执行批处理。
但是在显示的代码中,我建议首先执行删除查询,然后才填充并执行批处理。对于不熟悉代码的人来说,阅读这个命令要简单得多。