1. 程式人生 > 其它 >JDBC事務

JDBC事務

技術標籤:Java

JDBC事務

  嚴格來講,事務不是JDBC的技術而是資料庫的技術。

事務的概念

  把連續執行的一系列SQL語句視為一個整體。

PS:這裡的SQL語句,主要是DML語句(增刪改),DQL用的不多

如何判斷是否是一個整體?

  整體表示這一系列SQL語句要麼都執行成功,要麼都不執行。

public void preparedStatementBusiness() {
	String     sql1 = "UPDATE student SET age=age+10 WEHRE id=3";
	String     sql2 = "UPDATE student SET age=age+20 WEHRE id=3"
; String sql3 = "UPDATE student SET age=age+30 WEHRE id=3"; Connection conn = JdbcUtil.getConnection(); PreparedStatement ps = null; try { ps=conn.prepareStatement(sql1); ps.executeUpdate(); ps=conn.prepareStatement(sql2); ps.execute(); ps=conn.prepareStatement(sql3); ps.
executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtil.close(conn, ps); } }

  例如上面所示程式碼中執行的這三條SQL語句就不是一個整體,比如將sql2這個字串修改成錯誤的SQL語句,sql1語句依舊會修改資料庫的資料,而sql2會因為丟擲異常不執行。

事務的三個操作

  1. 開啟事務:取消自動提交事務
  2. 提交事務:使用commit來主動提交事務
  3. 回滾事務:如果出現異常,使用rollback將資料回滾到開始事務時

程式碼演示:

public void preparedStatementBusiness
() { String sql1 = "UPDATE student SET age=age+10 WEHRE id=3"; String sql2 = "UPDATE student SET age=age+20 WEHRE id=3"; String sql3 = "UPDATE student SET age=age+30 WEHRE id=3"; Connection conn = null; PreparedStatement ps = null; try { conn = JdbcUtil.getConnection(); conn.setAutoCommit(false);// 開啟事務——取消自動提交 ps = conn.prepareStatement(sql1); ps.executeUpdate(); ps = conn.prepareStatement(sql2); ps.execute(); ps = conn.prepareStatement(sql3); ps.executeUpdate(); conn.commit();// 提交事務 } catch (SQLException e) { try { conn.rollback();// 事務回滾 } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { JdbcUtil.close(conn, ps); } }