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也没有用,数据已经永久生成了 |
|