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;
    }

もともと、これらをベクトル/配列に追加して一度に 1 つずつ実行しようとしましたが、結果セットとインデックス作成が複雑なため、「jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed」を取得し続けました。

次に、すべてのステートメントをバッチに追加して一度に実行することを検討しました。もちろん、addBatch() には、パラメータとして PreparedStatement ではなく文字列が必要です。このサイトで検索したところ、次の回答が見つかりました: How to generate String "elegantly" in Java? これは、バッチに追加する文字列を作成してフォーマットすると、コードが SQL インジェクション攻撃に対して脆弱になることを示唆しています。

では、一度に複数のクエリを実行するためのこれら 2 つの方法に代わるものはありますか? そうでない場合、上記のどれが望ましいですか? また、その理由は何ですか?

4

1 に答える 1

0

複数のaddBatch方法があります。

パラメータを設定するのと同じ方法で設定してから、で宣言されたvoid addBatch()PreparedStatementを使用する必要があります。

于 2012-12-02T21:40:18.377 に答える