我有多个要同时执行的 SQL 准备语句。到目前为止,我一直在使用一个准备好的语句方法,它或多或少像这样:
public PreparedStatement createWordEntry(Connection c, String word, String word2, int num) throws SQLException{
PreparedStatement entry = c.prepareStatement("INSERT INTO table VALUES(?,?,?)");
entry.setString(1, word);
entry.setString(2, word2);
entry.setInt(3,num);
return entry;
}
最初,我尝试将它们添加到向量/数组并一次执行一个,但由于结果集和索引的复杂性,我不断收到“jdbc4.MySQLNonTransientConnectionException:语句关闭后不允许操作”
然后我考虑将所有语句添加到一个批处理中并立即执行。当然, addBatch() 需要一个字符串而不是 PreparedStatement 作为参数。当我在这个网站上搜索时,我找到了这个答案:如何在 Java 中“优雅地”生成字符串?这建议构建和格式化字符串以添加到批处理中,从而使代码容易受到 SQL 注入攻击。
那么,有没有替代这两种方法来一次执行多个查询呢?如果没有,以上哪个更可取,为什么?