1

我有多个要同时执行的 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 注入攻击。

那么,有没有替代这两种方法来一次执行多个查询呢?如果没有,以上哪个更可取,为什么?

4

1 回答 1

0

有多种addBatch方法。

您应该以与您相同的方式设置参数,然后使用void addBatch()声明的PreparedStatement.

于 2012-12-02T21:40:18.377 回答