JDBC批量處理
阿新 • • 發佈:2021-01-20
技術標籤: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);
開啟事務的批處理執行時間(單位是毫秒):
不開啟事務的批處理執行時間(單位是毫秒):