標籤:transaction 事務 批處理 引擎
事務Transaction
/* * 事務Transaction * JDBC預設開啟自動認可事務,需要關閉,才能手動控制事務 * * 預設MySQL儲存引擎為My...,其不支援交易處理,修改為InnoDB引擎 * create table 表名( ) engine=InnoDB default charset=utf8; * * InnoDB引擎預設關閉自動事務提交,修改MySQL為自動認可事務 * set autocommit=1; //1表示自動認可,0表示關閉自動認可 * show variables like ‘autocommit‘; */public class Test01 { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; conn = DBUtil.getConnection(); try { conn.setAutoCommit(false);//關閉自動認可事務,手動控制事務 String sql = "insert into user values (null,‘eee‘,‘123‘)"; pstmt = conn.prepareStatement(sql); pstmt.executeUpdate(); //插入第一個使用者 String sql2="insert into user values (‘fff‘,‘123‘)"; pstmt=conn.prepareStatement(sql2); pstmt.executeUpdate();//插入第二個使用者 conn.commit();//提交事務 System.out.println("插入使用者成功!"); } catch (SQLException e) { System.out.println("出現異常,復原事務"); try { conn.rollback();//復原事務 } catch (SQLException e1) { e1.printStackTrace(); } } finally { DBUtil.closeAll(rs, pstmt, conn); } }}
批處理
/* * 批處理 */public class Test02 { Connection conn = null; Statement stmt = null; PreparedStatement pstmt=null; ResultSet rs = null; public void test01() { try { conn = DBUtil.getConnection(); stmt = conn.createStatement(); // 添加批處理語句 stmt.addBatch("insert into user values (null,‘s001‘,‘123‘)"); stmt.addBatch("insert into user values (null,‘s002‘,‘123‘)"); stmt.addBatch("insert into user values (null,‘s003‘,‘123‘)"); // 執行批處理 int[] nums = stmt.executeBatch(); System.out.println(Arrays.toString(nums)); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.closeAll(rs, stmt, conn); } } public void test02() { try { conn = DBUtil.getConnection(); conn.setAutoCommit(false); pstmt=conn.prepareStatement("insert into user values (null,?,?)"); // 添加批處理語句 pstmt.setObject(1, "t001"); pstmt.setObject(2, "123"); pstmt.addBatch(); pstmt.setObject(1, "t002"); pstmt.setObject(2, "123"); pstmt.addBatch(); pstmt.setObject(1, "t003"); pstmt.setObject(2, "123"); pstmt.addBatch(); // 執行批處理 int[] nums=pstmt.executeBatch(); System.out.println(Arrays.toString(nums)); conn.commit(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { DBUtil.closeAll(rs, stmt, conn); } } public static void main(String[] args) { Test02 test = new Test02(); test.test02(); }}
JAVA學習筆記(五十四)- 事務Transaction與批處理