JDBC中的批次更新是什麼?請解釋。
將一組INSERT、UPDATE或DELETE命令(這些命令會產生更新計數值)組合起來,一次性執行這種機制稱為批次更新。
向批處理新增語句
Statement、PreparedStatement和CallableStatement物件包含一個(命令)列表,您可以使用**addBatch()**方法向其中新增相關的語句(這些語句返回更新計數值)。
stmt.addBatch(insert1); stmt.addBatch(insert2); stmt.addBatch(insert3);
執行批處理
新增所需的語句後,您可以使用Statement介面的**executeBatch()**方法執行批處理。
stmt.executeBatch();
使用批次更新,我們可以減少通訊開銷並提高Java應用程式的效能。
**注意:**在向批處理新增語句之前,需要使用**con.setAutoCommit(false)**關閉自動提交,執行批處理後,需要使用**con.commit()**方法儲存更改。
示例
假設我們在資料庫中建立了一個名為Sales的表,其描述如下:
+-------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+-------+ | Product_Name | varchar(255) | YES | | NULL | | | Name_Of_Customer | varchar(255) | YES | | NULL | | | Month_Of_Dispatch | varchar(255) | YES | | NULL | | | Price | int(11) | YES | | NULL | | | Location | varchar(255) | YES | | NULL | | +-------------------+--------------+------+-----+---------+-------+
此示例嘗試使用批次更新將一組語句插入到上述表中。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class BatchUpdates { public static void main(String args[])throws Exception { //Getting the connection String mysqlUrl = "jdbc:mysql:///sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a Statement object Statement stmt = con.createStatement(); //Setting auto-commit false con.setAutoCommit(false); //Statements to insert records String insert1 = "INSERT INTO Dispatches VALUES ('KeyBoard', 'Amith', 'January', 1000, 'Hyderabad')"; String insert2 = "INSERT INTO Dispatches VALUES ('Earphones', 'SUMITH', 'March', 500, 'Vishakhapatnam')"; String insert3 = "INSERT INTO Dispatches VALUES ('Mouse', 'Sudha', 'September', 200, 'Vijayawada')"; //Adding the statements to batch stmt.addBatch(insert1); stmt.addBatch(insert2); stmt.addBatch(insert3); //Executing the batch stmt.executeBatch(); //Saving the changes con.commit(); System.out.println("Records inserted......"); } }
輸出
Connection established...... Records inserted......
如果驗證表的內容,您可以在其中找到插入的記錄,例如:
+--------------+------------------+-------------------+-------+----------------+ | Product_Name | Name_Of_Customer | Month_Of_Dispatch | Price | Location | +--------------+------------------+-------------------+-------+----------------+ | KeyBoard | Amith | January | 1000 | Hyderabad | | Earphones | SUMITH | March | 500 | Vishakhapatnam | | Mouse | Sudha | September | 200 | Vijayawada | +--------------+------------------+-------------------+-------+----------------+
廣告