執行批次作業
在對 SQL Server 資料庫進行多重更新時,為了改進效能,Microsoft JDBC Driver for SQL Server 提供以單一工作單元提交多重更新的功能,這也稱為批次。
SQLServerStatement、SQLServerPreparedStatement 和 SQLServerCallableStatement 類別都可以用來提交批次更新。 addBatch 方法用來新增命令。 clearBatch 方法用來清除命令清單。 executeBatch 方法用來提交所有命令以供處理。 只有傳回簡單更新計數的資料定義語言 (DDL) 和資料操作語言 (DML) 陳述式可以當作批次的一部份來執行。
executeBatch 方法會傳回對應到每個命令之更新計數的 int 值陣列。 如果其中一個命令失敗,則會擲回 BatchUpdateException,而且您應該使用 BatchUpdateException 類別的 getUpdateCounts 方法來擷取更新計數陣列。 如果某命令失敗,驅動程式會繼續處理其餘命令。 不過,如果命令有語法錯誤,批次中的陳述式會失敗。
注意
如果不必使用更新計數,可以先對 SQL Server 發出 SET NOCOUNT ON 陳述式。 這將會減少網路流量,而且還會加強應用程式的效能。
例如,在 AdventureWorks2022 範例資料庫中建立下列資料表:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
在下列範例中,AdventureWorks2022 範例資料庫的開啟連線會傳入函式中、使用 addBatch 方法來建立要執行的陳述式,並呼叫 executeBatch 方法以將批次提交至資料庫。
public static void executeBatchUpdate(Connection con) {
try {
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
int[] updateCounts = stmt.executeBatch();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}