第一次用jdbc的事务回滚,但是rollback为什么没反应
1个回答
2016-05-23
展开全部
//这里给你稍微改了改,这样就可以测试rollback了
public void save() throws Exception{
//创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/db_dark", "root", "123456");
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//设置不自动提交
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
try{
String sSql = "insert into area (name) values ('hh')";
//执行插入操作
stmt.executeUpdate(sSql);
//这里故意让其抛出一个异常
String sNull = null;
//如果想正常执行commit提交更改,则注释下面这个判断
if (sNull.equals("")){
//上面这个判断会导致系统抛出一个空指针异常NullPointerException
//注意以后判断字符串是否为空的时候应该这样写
//if ("".equals(sNull))这样就不会报错空指针了
}
//如果语句执行到这里无异常,提交事物!
conn.commit();
//抛出一个运行时异常(现在抛出的异常其实不是这个新创建的,因为在上面已经抛出了空指针异常)
throw new RuntimeException();
}catch(Exception e){
//打印异常信息
e.printStackTrace();
//遇到异常回滚事物,不提交更改
conn.rollback();
//设置自动提交
conn.setAutoCommit(true);
}finally{
//非空的时候才关闭
if (stmt != null){
stmt.close();
}
//先创建的最后关闭
if (conn != null){
conn.close();
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询