1. 程式人生 > 其它 >JDBC批量處理

JDBC批量處理

技術標籤:Java

  在資料庫操作時,可能需要對資料庫進行批量的操作,比如從excel表中讀取資料匯入到資料庫中。

public void statementBatch() {
	String            sql  = "INSERT INTO student(id,name,age,gender) VALUES (?,?,?,?)";
	Connection        conn = null;
	PreparedStatement ps   = null;
	try {
		conn = JdbcUtil.getConnection();
		ps =
conn.prepareStatement(sql); for (int i = 1; i <= 1000; i++) { ps.setInt(1, i); ps.setString(2, "零號" + i); ps.setInt(3, 20); ps.setString(4, "男"); ps.executeUpdate(); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtil.close(conn, ps); }
}

  上面的程式碼實現了將1000條記錄插入到資料庫中的操作,從結果上來看是沒有問題的,但是還不能說是批量處理,因為它是將一條語句作為一個整體,所以需要使用JDBC事務的處理。

批量處理

  addBatch()和executeBatch()是批量處理時使用的方法

public void statementBatch() {
	String            sql  = "INSERT INTO student(id,name,age,gender) VALUES (?,?,?,?)";
	Connection        conn = null;
	PreparedStatement ps   =
null; try { conn = JdbcUtil.getConnection(); conn.setAutoCommit(false); ps = conn.prepareStatement(sql); for (int i = 1; i <= 1000; i++) { ps.setInt(1, i); ps.setString(2, "零號" + i); ps.setInt(3, 20); ps.setString(4, "男"); // ps.executeUpdate(); ps.addBatch();// 新增批量處理的SQL語句 } ps.executeBatch();// 批量執行SQL語句 ps.clearBatch();// 清空批量處理的SQL語句 conn.commit(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { JdbcUtil.close(conn, ps); } }

將批量處理視為一個事務的好處

  效率比一條語句作為一個事務要高
  在方法的開始和結束部位加上下列程式碼來計算執行時間

// 前面
long start = System.currentTimeMillis();
// 後面
long end = System.currentTimeMillis();
System.out.println(end - start);

  開啟事務的批處理執行時間(單位是毫秒):在這裡插入圖片描述

  不開啟事務的批處理執行時間(單位是毫秒):在這裡插入圖片描述