Transaction

jdbc:setAutoCommit(true) 是否送出過去的執行?

  • November 27, 2012

我想執行一些語句,並在最後送出整個批次。我嘗試了以下方法:

connection.setAutoCommit(false);            // Don't commit for each statement
int[] returnCodes = pstmt.executeBatch();   // Execute all statements
connection.setAutoCommit(true);             // Back to normal state - future statements
                                           // will be committed instantly
connection.commit();                        // Commit our batch

失敗得很慘:

java.sql.SQLException: Can't call commit when autocommit=true
--reference to the line with connection.commit()--

正確的方法是什麼?是否connection.setAutoCommit(true)送出所有已執行的批處理語句?

Connection.setAutoCommit文件:

注意:如果在事務期間呼叫此方法並且更改了自動送出模式,則事務將被送出。如果呼叫了 setAutoCommit 並且未更改自動送出模式,則該呼叫是無操作的。

但我認為它在您的程式碼中不是非常可讀/明顯。您可能應該在切換回自動送出模式之前簡單地送出。使意圖明確。

引用自:https://dba.stackexchange.com/questions/29341