JDBC:批量處理(Statement方法)
阿新 • • 發佈:2020-12-09
技術標籤:MySQLJava學習javajdbcmysqlStatement批處理
1. 什麼是批處理?
批量處理執行SQL語句,呼叫資料庫一次來提交多組資料,一次執行完成與資料庫之間的互動。
2. 如何實現批處理?
- 不使用 JDBC 驅動程式來實現此功能。應使用 DatabaseMetaData.supportsBatchUpdates() 方法來確定目標資料庫是否支援批量更新處理。
- 如果 JDBC 驅動程式支援此功能,該方法將返回 true。Statement,PreparedStatement 和 CallableStatement的addBatch() 方法用於將單個語句新增到批處理。
- executeBatch() 用於執行組成批量的所有語句。executeBatch() 返回一個整數陣列,陣列的每個元素表示相應更新語句的更新計數。就像將批處理語句新增到處理中一樣,可以使用clearBatch() 方法刪除它們。此方法將刪除所有使用 addBatch() 方法新增的語句。 但是,無法指定選擇某個要刪除的語句。
3. 使用Statement物件進行批處理
1. 使用createStatement()方法建立Statement物件。 2. 使用setAutoCommit()將自動提交設定為false。 3. 使用addBatch()方法在建立的Statement物件上新增SQL語句到批處理中。 4. 在建立的Statement物件上使用executeBatch()方法執行所有SQL語句。 5. 最後,使用commit()方法提交所有更改。
public class BatchingWithStatement {
// 定義驅動/URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/school";
// 定義使用者資訊
static final String USER = "root";
static final String PASS = "root" ;
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 1.註冊驅動
Class.forName("com.mysql.jdbc.Driver");
// 2.連線資料庫
conn = DriverManager.getConnection(DB_URL,USER,PASS);
// 3.建立資料庫連線物件
stmt = conn.createStatement();
// 4.設定auto-commit 為 false
conn.setAutoCommit(false);
// 5. 輸出所有記錄
System.out.println(stmt);
// 建立sql語句
String SQL = "INSERT INTO employees (id, first, last, age) VALUES (199,'Cindy', 'Spence', 20)";
// batch
stmt.addBatch(SQL);
// 再創造一條sql語句
SQL = "INSERT INTO employees (id, first, last, age) VALUES (202,'Sonia', 'Baby', 35)";
// batch
stmt.addBatch(SQL);
// 再創造一條sql語句
SQL = "UPDATE employees SET age = 25 WHERE id = 201";
// batch
stmt.addBatch(SQL);
// 建立陣列去接收值
int[] count = stmt.executeBatch();
// 提交
conn.commit();
// 再次輸出所有記錄
System.out.println(stmt);
// 釋放資源
stmt.close();
conn.close();
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("程式結束 !");
}
public static void printRows(Statement stmt) throws SQLException{
// 輸出所有記錄
String sql = "SELECT id, First, Last, age FROM employees";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
//通過列名檢索
int id = rs.getInt("id");
int age = rs.getInt("age");
String First = rs.getString("First");
String Last = rs.getString("Last");
// 輸出值
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + First);
System.out.println(", Last: " + Last);
}
System.out.println();
rs.close();
}
}
輸出: