2011-02-01 24 views
8

Statementの2つの挿入クエリを1つのトランザクションにまとめて実行しようとしています。1つのトランザクションで2つの異なるクエリを実行する

私は addBatch方法を見ていたが、私が正しく理解すれば、異なるパラメータで同じ挿入を複数回実行するために、単一の PreparedStatementで使用することができ、またはバッチに複数のクエリを追加する Statementオブジェクト上で使用することが

しかし、パラメータを追加することはできません(SQLインジェクションスタイルのSQL文字列に値を追加できる可能性があります)。

また、両方の挿入を1つのSQL文(insert into table1 values(?, ?); insert into table2 values(?, ?);)に書き込むという単純な方法を試しましたが、PreparedStatementは最初の2つのパラメータしか見ることができず、3番目と4番目の例外を設定しようとしています。

+3

を、同じトランザクションで2 'PreparedStatement'を使用するように望んでいないため、あなたの理由は何ですか?それはあなたの人生を楽にします! –

+0

ええ、私はそれについて考えていない以外は、それをしない特別な理由はないと思います。それを指摘してくれてありがとう。 –

答えて

22

次の2つの別々のステートメントを実行し、自動コミット無効にして手動でトランザクションをコミットすることができます好奇心のうち

connection.setAutoCommit(false); 
try { 
    ... 
    stmt1.execute(); 
    ... 
    stmt2.execute(); 
    connection.commit(); 
} catch (Exception ex) { 
    connection.rollback(); 
} 
関連する問題