我想通過java.sql
準備好的語句批量執行創建多個表(最多20個)。大多數表格都與彼此相關。但我腦海中有些混亂。批准備語句自動提交
1)設置連接自動提交真或假? 2)有沒有BatchExecute的特殊模式?喜歡下來。我想要父表創建查詢必須先執行。 3)如果錯誤發生,所有批次都回滾?
我想通過java.sql
準備好的語句批量執行創建多個表(最多20個)。大多數表格都與彼此相關。但我腦海中有些混亂。批准備語句自動提交
1)設置連接自動提交真或假? 2)有沒有BatchExecute的特殊模式?喜歡下來。我想要父表創建查詢必須先執行。 3)如果錯誤發生,所有批次都回滾?
帶有自動提交的批量執行行爲是實現定義的,有些驅動程序甚至可能不支持該行爲。所以如果你想使用批處理執行,請將auto commit設置爲false。
也就是說,有些數據庫隱式地提交每個DDL語句;這可能會影響批處理執行的正確工作。我建議採取安全路線,不要使用DDL的批處理執行,而是使用正常的Statement
和execute(String)
來執行DDL。
實際上在這種情況下使用批處理執行沒有多大意義。一次插入或更新數千行時,批處理執行會爲您提供(大)性能改進。 你只需要擁有一個事務中的所有您的語句:
您需要根據它們之間的外鍵自己訂購create-table語句。 正如Mark指出的那樣,您正在使用的數據庫可能會立即提交每個創建表並忽略該事務。並非所有DB都支持表的事務性創建。你需要測試這個或者在這方面做更多的研究。
這是我的理解,並不是所有的RDBMS數據定義語言都可以在一個事務中執行。 –
這似乎是一件好奇的事情。如果你想讓他們都回到角色,那麼你應該將autocommit設置爲false。但是像這樣搞亂數據庫目錄會導致問題。 – BevynQ
所以任何更好的方式來創建表。請給我建議。 –