在的addBatch()
方法旁邊還有Statement
類中的addBatch(String)
方法。有關addBatch(字符串)的注意事項
我想處理一系列不同的sql語句,並且正在尋找關於addBatch(String)意味着性能方面的一些說明。使用這種方法是安全的(還是快速),還是將Java中類似的sql語句分組並執行它們會更好?
在的addBatch()
方法旁邊還有Statement
類中的addBatch(String)
方法。有關addBatch(字符串)的注意事項
我想處理一系列不同的sql語句,並且正在尋找關於addBatch(String)意味着性能方面的一些說明。使用這種方法是安全的(還是快速),還是將Java中類似的sql語句分組並執行它們會更好?
批處理允許您將相關的SQL語句分組到一個批處理中,並通過一次調用將它們提交給數據庫。
當您一次向數據庫發送多個SQL語句時,可以減少通信開銷,從而提高性能。
addBatch(String sql)
在java.sql.Statement
和addBatch()
在java.sql.PreparedStatement
定義的接口定義爲子接口,其extends Statement
之一。 (其他是java.sql.CallableStatement
)
根據JAVA Doc
addbatch(String sql)
方法不能在PreparedStatement
或CallableStatement
和SQL叫做 - 通常這是一個SQL INSERT
或UPDATE
聲明。
addBatch()
是首選如果您想批量插入或批量更新操作。
上有一批exections幾阻塞因素是
例如:如果你使用MySQL,使用最新的驅動程序添加rewriteBatchedStatements =真到連接字符串,使statement.addBatch ()實際上創建批量插入。
此外,您應該確保自動提交是錯誤的。維護一個計數器,並在該計數器上執行executeBatch,它在Java中的可用堆內存受到約束時提供幫助。
例子:
conn.setAutoCommit(false);
PreparedStatement pStmt = conn.prepareStatement("INSERT INTO mytable (field1,field2) VALUES (?,?)");
for all values:
pStmt.setString(1,val1);
pStmt.setString(2,val2);
pStmt.addBatch();
if (i % 1000 == 0) {
pstmt.executeBatch();// Execute every 1000 items
}
pstmt.executeBatch();
conn.commit();
我很害怕,這不是答案,我在尋找。我知道,addBatch()是如何工作的,並且您的語句addBatch(String)不能從PreparedStatement訪問是不正確的。我想知道,addBatch(String)是否提供了任何優勢(performancewise)逐一執行語句。 – Jonathan
@Jonathan:請參閱Java Doc的鏈接「addBatch(String)不能從PreparedStatement訪問是不正確的。」從答案。此外,它寫道,addBatch()具有性能明智的優勢考慮到事實。 –
這個'i'變量來自哪裏?我們可以從聲明中得到它嗎? – sebnukem