JDBC中的批處理是什麼?
將相關的SQL語句分組到一個批次中,並一次性執行/提交它們,這被稱為批處理。
在依次執行一組語句時,執行會同時在資料庫和程式之間切換。
使用批處理,我們可以減少這種通訊開銷並提高Java應用程式的效能。
例如,如果我們有一個名為**Emp**的表,其描述如下:
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | DOB | String | YES | | NULL | | | Location | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
如果您想插入資料,我們通常會使用以下語句:
Stmt.execute("INSERT INTO Emp VALUES ('Amit', '30-9-1989', 'Hyderabad')"); Stmt.execute("INSERT INTO Emp VALUES ('Amit', '1-9-1989', 'Vishakhapatnam')");
並使用PreparedStatement:
String query = "INSERT INTO Emp(Name, String, Location) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query); pstmt.setString(1, "Amit"); pstmt.setDate(2, "30-9-1989")); pstmt.setString(3, "Hyderabad"); pstmt.execute(); pstmt.setString(1, "Sumith"); pstmt.setDate(2, "1-9-1989"); //Friday, Sept 1, 1989 12:00:00 AM pstmt.setString(3, "Vishakhapatnam"); pstmt.execute();
如果您仔細觀察這兩種情況,我們會分別執行每個插入語句。這意味著對於程式中的每個插入語句,當呼叫execute()方法時,插入語句會在資料庫中執行並返回到程式。
對於少量插入來說,這還可以。但是,如果在插入大量記錄時發生這種情況,可能會出現通訊開銷,程式執行時間會更長。
使用批處理,您可以簡單地使用Statement介面的**addBatch()**方法將語句新增到批次中,然後使用**executeBatch()**方法稍後執行它們,如下所示:
Stmt.addBatch("INSERT INTO Emp VALUES ('Amit', '30-9-1989', 'Hyderabad')"); Stmt.addBatch("INSERT INTO Emp VALUES ('Amit', '1-9-1989', 'Vishakhapatnam')"); Stmt.executeBatch(); pstmt.setString(1, "Amit"); pstmt.setDate(2, "30-9-1989")); pstmt.setString(3, "Hyderabad"); pstmt.addBatch(); pstmt.setString(1, "Sumith"); pstmt.setDate(2, "1-9-1989"); //Friday, Sept 1, 1989 12:00:00 AM pstmt.setString(3, "Vishakhapatnam"); pstmt.addBatch(); pstmt.executeBatch();
廣告