JDBC 回滚 rollback

package com.gemonno.JDBC;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint;


public class TserRollBack {
Connection coon ;
PreparedStatement pstm;
ResultSet rs;
Savepoint sp = null;//设置回滚点
public static void main(String[] args) throws SQLException {
TserRollBack trb = new TserRollBack();
trb.update();

}


public void update() throws SQLException {
try {

coon = JDBCUtil.getInstance().getConnection();
coon.setAutoCommit(false);//设置为false;事物不会自动提交;
String sql =" update emp set salaty =5000 where eno =105  ";
pstm =coon.prepareStatement(sql);
pstm.executeUpdate();

sp = coon.setSavepoint();//在这里设置回滚点;只回滚到这里,就可以让上面的语句执行完,不必回滚;



sql ="select salaty from emp ";
pstm =coon.prepareStatement(sql);
rs =pstm.executeQuery();
rs.next();
double d  =rs.getDouble(1);
System.out.println(d);

if(d>4000) {
throw new RuntimeException("da yu 4000");//这里抛异常,要在下面捕获异常;
}
if (d<=4000) {

sql = "update emp set salaty =6000  where eno =107 ";
pstm=coon.prepareStatement(sql);
pstm.executeUpdate();
}
coon.commit();//事物在这里才提交;
}catch(RuntimeException e) {
if (coon!=null&&sp!=null) {

coon.rollback(sp);//当catch到上面d》4000的异常时候,就会执行这里的语句。回滚到设置的回滚点

                                coon.commit();//回滚之后也要提交;

}

catch (SQLException e) {
if (coon!=null) {

coon.rollback();//上面的语句虽然 在false的情况下未提交但是已经执行,要回滚到原来的状态;

                                  

throw e;//这里要抛异常,方法上也要抛,要让调用他的人看到异常的情况;
}
}finally {
JDBCUtil.getInstance().release(pstm, rs, coon);
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值