1. 程式人生 > 其它 >JDBC:批量處理(Statement方法)

JDBC:批量處理(Statement方法)

技術標籤:MySQLJava學習javajdbcmysqlStatement批處理

1. 什麼是批處理?

批量處理執行SQL語句,呼叫資料庫一次來提交多組資料,一次執行完成與資料庫之間的互動。

2. 如何實現批處理?

  1. 不使用 JDBC 驅動程式來實現此功能。應使用 DatabaseMetaData.supportsBatchUpdates() 方法來確定目標資料庫是否支援批量更新處理。
  2. 如果 JDBC 驅動程式支援此功能,該方法將返回 trueStatementPreparedStatementCallableStatement的addBatch() 方法用於將單個語句新增到批處理。
  3. 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(); } }

輸出:
資料庫表
控制檯輸出