1. 成功操作的示例
执行操作前
package com.machuang.jdbc; /** * 测试 事务性 */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Demo06 { public static void main(String[] args) { Connection conn = null; PreparedStatement ps1 = null; PreparedStatement ps2 = null; try { // 加载mysql驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/testjdbc","root","333666"); // ps1 和 ps2 在一个提交之间,所以时一个事务 conn.setAutoCommit(false); // 设置事务手动提交 ps1 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?)"); ps1.setObject(1, "小明"); ps1.setObject(2, "646468"); ps1.execute(); System.out.println("插入一条记录,小明"); try { Thread.sleep(500); // 线程休眠 500ms } catch (InterruptedException e) { e.printStackTrace(); } ps2 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?)"); ps2.setObject(1, "小红"); ps2.setObject(2, "35884"); ps2.execute(); System.out.println("插入一条记录,小红"); conn.commit(); // 提交进行执行 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if(null != ps2) { ps2.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(null != ps1) { ps1.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(null != conn) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
执行操作后
1. 失败操作的示例
执行操作前
package com.machuang.jdbc; /** * 测试 事务性 */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Demo06 { public static void main(String[] args) { Connection conn = null; PreparedStatement ps1 = null; PreparedStatement ps2 = null; try { // 加载mysql驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/testjdbc","root","333666"); // ps1 和 ps2 在一个提交之间,所以时一个事务 conn.setAutoCommit(false); // 设置事务手动提交 ps1 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?)"); ps1.setObject(1, "小明"); ps1.setObject(2, "646468"); ps1.execute(); System.out.println("插入一条记录,小明"); try { Thread.sleep(500); // 线程休眠 500ms } catch (InterruptedException e) { e.printStackTrace(); } ps2 = conn.prepareStatement("insert into t_usr (usrName, pwd) value(?, ?, ?)"); // 该处出错 ps2.setObject(1, "小红"); ps2.setObject(2, "35884"); ps2.execute(); System.out.println("插入一条记录,小红"); conn.commit(); // 提交进行执行 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if(null != ps2) { ps2.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(null != ps1) { ps1.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(null != conn) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
代码出错:
执行操作后