2011-02-01 49 views
8

我試圖在一個Statement中執行兩個插入查詢,將它們放在一個事務中。在一個事務中執行兩個不同的查詢

我一直在尋找在addBatch方法,但如果我理解正確它可以用單個PreparedStatement被用於多次使用不同的參數執行相同的插入件,或一個Statement對象上被用於更多的查詢添加到批料中,但沒有添加參數的能力(所以我可能能夠在SQL字符串中添加值。SQL注入風格)。

我也嘗試過在兩個sql語句(insert into table1 values(?, ?); insert into table2 values(?, ?);)中寫入兩個插入的簡單方法,但這種方式PreparedStatement只能看到前兩個參數,並試圖設置第三個和第四個拋出異常。

+3

出於好奇,你有什麼理由不希望在同一事務中使用兩個`PreparedStatement`?這會讓你的生活更輕鬆! – 2011-02-01 09:09:17

回答

22

您可以禁用自動提交,執行兩個單獨的語句,然後手動提交事務:

connection.setAutoCommit(false); 
try { 
    ... 
    stmt1.execute(); 
    ... 
    stmt2.execute(); 
    connection.commit(); 
} catch (Exception ex) { 
    connection.rollback(); 
} 
相關問題