Connection conn = null; Statement smt = null; ResultSet result = null; // 注册驱动 try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/hehe"; String dbUsername = "root"; String dbPassword = "12345ad6"; // ----------------------------------------------------------------------------------------- System.out.println(" "事务" "); conn = DriverManager.getConnection(url, dbUsername, dbPassword); conn.setAutoCommit(false); smt = conn.createStatement(); smt.execute("insert into dept values(1,""a"",""s"")"); smt.execute("insert into dept values(2,""a"",""s"")"); smt.execute("insert into dept values(""s"",""a"",""s"")");//这个sql会产生异常 第一个值应该是int类型 conn.commit(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { conn.rollback() e.printStackTrace(); } 我知道rollback是用来回滚的 一个不成功 所有的都不成功 |
|
20分 |
conn.rollback()
这句注释掉 那么这句有没有注释掉 smt.execute(“insert into dept values(“”s””,””a””,””s””)”);//这个sql会产生异常 第一个值应该是int类型 如果这句没有注释掉 这样也就不会插入 |
既然这样 那 何必还要加上 rollback 或者说rollback有其他用处? |
|
我执行一个正确的sql commit之后 rollback 也会提交
smt.executeUpdate(“update dept set id=5 where id=1”); conn.commit(); conn.rollback(); |
|
都在一个事物中,事物的原子性要求的,如果想前两条保存成功,要么把前两条放到另一个事物中,要么使用保存点
|
|
commit事务已经结束了,再rollback也没有用,数据已经永久生成了 |