同時に実行したい 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 つの方法に代わるものはありますか? そうでない場合、上記のどれが望ましいですか? また、その理由は何ですか?