import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Calendar; import com.gem.demo.util.JDBCUtil; /** * * Title: Demo03 * * Description: * JDBC事务 * @version v0.01 * * @author ByChai * * @date 2020年8月24日 下午2:23:25 * * */ public class Demo03 { public static void main(String[] args) { Connection conn=null; PreparedStatement psmt=null; try { conn=JDBCUtil.getConnection(); //取消事务自动提交 conn.setAutoCommit(false); //转账 账户1-->账户2 转账500 String sql="update account set balance=balance-? where username=? and pwd=?"; psmt=conn.prepareStatement(sql); //账户1 甲账户 扣款500 psmt.setDouble(1, 500); psmt.setString(2, "10001"); psmt.setString(3, "123456"); psmt.executeUpdate(); //模拟灾难发生 zainanlailing(); //账户2 乙账户 收到500 psmt.setDouble(1, -500); psmt.setString(2, "10002"); psmt.setString(3, "123123"); psmt.executeUpdate(); //提交事务 conn.commit(); } catch (Exception e) { if(conn!=null) { try { //事务回滚 Connection conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } public static void zainanlailing() { //获取当前秒数 Calendar c=Calendar.getInstance(); //如果当前时间秒数>30 表示有灾难发生 抛异常 throw int second=c.get(Calendar.SECOND); if(second>30) { //触发异常 System.out.println("有异常"); throw new RuntimeException("灾难降临。。。"); } } }
事务处理