package com.etc.entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint; import org.junit.Test; import com.etc.utils.JDBCUtil; public class TransactionDemo1 {
//@Test
public void testTransaction1()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null; try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务
String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate();
String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate();
conn.commit();//通知提交事务
System.out.println("成功!");
} catch (Exception e) {
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
//@Test
public void testTransaction2()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务
String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate();
int i=1/0;//异常语句 事务不能提交 数据库自动回滚
String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate();
conn.commit();//通知提交事务
System.out.println("成功!");
} catch (Exception e) {
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
//@Test
public void testTransaction3()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务
String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate();
int i=1/0;//异常语句
String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate();
conn.commit();//通知提交事务
System.out.println("成功!");
} catch (Exception e) {
try {
conn.rollback();//异常发生后 手动通知数据库事务回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
@Test //sql1有效;sql2无效;sql3无效;
public void testTransaction4()
{
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
Savepoint sp=null;//事务回滚点
try {
conn = JDBCUtil.getConnection();
conn.setAutoCommit(false);//通知数据库开启事务 String sql1 = "update account set money=money-100 where name='A'";
st = conn.prepareStatement(sql1);
st.executeUpdate(); sp=conn.setSavepoint();//设置事务回滚点 String sql2 = "update account set money=money+100 where name='B'";
st = conn.prepareStatement(sql2);
st.executeUpdate(); int i=1/0;//异常语句
String sql3 = "update account set money=money+100 where name='C'";
st = conn.prepareStatement(sql3);
st.executeUpdate(); conn.commit();//通知提交事务 } catch (Exception e) {
try {
conn.rollback(sp);//回滚到事务回滚点
conn.commit();//回滚之后提交
} catch (SQLException e1) { e1.printStackTrace();
}
e.printStackTrace();
}
finally{
JDBCUtil.close(rs, st, conn);
} }
}

  

最新文章

  1. 基于pcDuino-V2的无线视频智能小车 - UBUNTU系统上的gtk编程
  2. oracle 中的dual表简介与用法
  3. LPTHW 笨方法学python 19章
  4. Linux命令之reset - 终端屏幕混乱的终结者
  5. 由“js跨域”想到"AJAX也不一定要XMLHttpRequest"
  6. oracle-SQL语言基础-事务控制命令命令
  7. Get和Post的参数传值
  8. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变
  9. 使用jcifs.smb.SmbFile读取Windows上共享目录的文件
  10. SpringMVC格式化显示
  11. 关于Visual Studio未能加载各种Package包的解决
  12. Flunetd 用于统一日志记录层的开源数据收集器
  13. Android 社区App 《窝吧》开源分享
  14. vue中get和post请求
  15. Oracle数据库查询优化方案(处理上百万级记录如何提高处理查询速度)
  16. jquery快速入门(五)
  17. vue-cli搭建项目模拟后台接口数据,webpack-dev-conf.js文件配置
  18. 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口
  19. LeetCode算法题-Excel Sheet Column Title(Java实现)
  20. golang数组排序算法

热门文章

  1. 【thrift】初识thrift
  2. iOS UILabel 省略号 不变色 问题处理
  3. css3图片过滤效果
  4. 2014暑假ACM13级一批集训内容
  5. Luogu-4049 [JSOI2007]合金
  6. ios UIImageWriteToSavedPhotosAlbum报错 NSPhotoLibraryAddUsageDescription
  7. Future模式实例
  8. 囤题&&发布记录
  9. Windows默认字符集_查询
  10. Kafka- Spark消费Kafka