簡體   English   中英

批處理准備好的語句自動提交

[英]Batch prepared statement auto commit

我試圖通過java.sql准備好的語句批量執行創建多個表(最多20個)。 大多數表彼此相關。 但是我心中有些困惑。

1)設置連接自動提交是對還是錯? 2)BatchExecute是否有任何特殊模式? 喜歡下來。 我要為父表創建查詢必須首先執行。 3)如果發生錯誤,則所有批次都回滾?

具有自動提交功能的批處理執行行為是由實現定義的,某些驅動程序甚至可能不支持該行為。 因此,如果要使用批處理執行,請將auto commit設置為false。

也就是說,某些數據庫隱式地提交每個DDL語句。 這可能會干擾批處理執行的正確工作。 我建議采取安全的路線,不要對DDL使用批處理,而應使用普通的Statementexecute(String)來執行DDL。

在這種情況下,實際上使用批處理執行沒有多大意義。 一次執行插入或更新數千行時,批處理執行將為您帶來(重大)性能提升。 您只需要在一個事務中包含所有語句即可:

  1. 調用Connection.setAutoCommit(false)
  2. 使用Statement.executeUpdate執行創建表語句
  3. 調用Connection.commit()

您需要根據它們之間的外鍵自己對create-table語句進行排序。 正如Mark所指出的,您正在使用的DB可能會立即提交每個create-table並忽略事務。 並非所有的數據庫都支持表的事務性創建。 您將需要對此進行測試或進行更多研究。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM