功能
1.獲取執行SQL的對象
方法:createStatement() 用於創建向數據庫發送SQL語句的一個對象。
修飾/返回值類型:Statement(聲明)
方法:prepareStatement(String sql) 用於創建向數據庫發送SQL語句的一個對象。
修飾/返回值類型:PreparedStatement (准備好的 聲明)
2.管理事物
事物:一個或一組SQL語句組成一個執行單元,要么全部執行,要么全不執行
開啟事物
方法:setAutoCommit(boolean autoCommit) 調用該方法設置參數為false即開啟事物(autoCommit自動提交)false錯true對
修飾/返回值類型:void (空的)
提交事物
方法:commit()
修飾/返回值類型:
回滾事物
方法:rollback()
修飾/返回值類型:
package cn.itcast.jdbc;
import cn.itcast.util.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; /** * 事物操作 轉賬方法 */ public class JdbcDemo12 { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; try { //1.獲取去數據庫連接 conn = JDBCUtils.getConnection(); //開啟事物 conn.setAutoCommit(false); //2.定義SQL //2.1A的lowest_sal-500 String sql1 = " update job_grades set lowest_sal = lowest_sal-? where grade_level =?;"; //2.2B的lowest_sal+500 String sql2 = " update job_grades set lowest_sal = lowest_sal+? where grade_level =?;"; //3.獲取執行SQL的對象 pstmt1 = conn.prepareStatement(sql1); pstmt2 = conn.prepareStatement(sql2); //4.設置參數 pstmt1.setDouble(1, 500); pstmt1.setString(2, "A"); pstmt2.setDouble(1, 500); pstmt2.setString(2, "B"); //5.執行SQL語句 pstmt1.executeUpdate(); //手動制造異常 int i = 3 / 0; pstmt2.executeUpdate(); //提交事物 conn.commit(); } catch (Exception e) {//只要出異常就回滾所以要用一個大的把異常都抓到 //出異常就會進入catch內,所以在這里進行回滾 try { if (conn != null) { conn.rollback(); } } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { JDBCUtils.close(pstmt1, conn); JDBCUtils.close(pstmt2, null); } } }