JDBC 事务
在dos命令行操作oracle时 , 执行DML , 需要结束事务 (commit提交 或 rollback回退)
在JDBC中, 事务是自动提交的, 每执行一条DML语句, 事务就自动提交一次.
我们可以通过JDBC的事务API , 开始事务的手动提交, 将多条DML语句看作一个整体, 要么一起成功, 要么一起失败.
JDBC事务操作格式:
注意: 开启事务的手动提交 ,是通过连接对象完成的.
某个数据连接对象的事务开启手动提交后, 这个连接对象的事务需要手动控制. 其他连接对象不受影响.
操作方法:
1. 开始事务的手动提交:
conn.setAutoCommit(boolean flag);
参数含义: true表示自动提交 . false表示手动提交.
2. 提交事务:
conn.commit();
3. 回退事务:
rollback();
事务案例:
public class Demo {
public static void main(String[] args) throws Exception {
//1. 加载数据库的驱动
Class.forName("oracle.jdbc.OracleDriver");
//2. 获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "123");
//2.1 设置连接对象的事务 为 手动提交
conn.setAutoCommit(false);
//3. 开始描述逻辑
System.out.println("金刚: 转账中...");
//3.1 减少金刚账户的余额 500 | 3.1.1 预编译SQL执行环境
PreparedStatement state = conn.prepareStatement("update user33 set money=500 where id=2");
//3.1.2 执行SQL语句
boolean success = state.executeUpdate()>0?true:false;
if(success) {
System.out.println("后台逻辑: 金刚余额减少完毕.");
if(1==2) {
conn.rollback();
throw new RuntimeException("后台服务器... 停电了");
}
//3.2 增加豪杰账户的余额 500
//3.2.1 预编译SQL执行环境
PreparedStatement state2 = conn.prepareStatement("update user33 set money=600 where id=1");
//3.2.2 执行SQ语句
boolean success2 = state2.executeUpdate()>0?true:false;
if(success2) {
System.out.println("后台逻辑: 豪杰余额增加完毕");
conn.commit();
}
state2.close();
}
state.close();
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!