JDBC_事务的使用
来源:互联网 发布:淘宝助理导入宝贝为0 编辑:程序博客网 时间:2024/06/01 09:58
当我们在JDBC程序中向数据库获取一个Connection对象时,在默认情况下这个Connection对象会自动向数据库提交当下所执行的sql语句,但我们在某些情况想要将多条sql语句同时提交的话,我们就要将所执行的多条sql语句放在事务当中同时执行
事务的四大特性:
a:原子性:是数据库中最小的逻辑工作单元,对其数据修改,要么全部执行要么全部不执行.
b:一致性:事务在完成时,必须是所有的数据都保持一致的状态.
c:隔离性:一个事务的执行过程中,不能被其他事务所干扰.事物之间是相互隔离的.
d:持久性:一个事务一旦提交,事务的操作便永久的保存在数据库中.即使此时再执行回滚操作也不能撤销所做的更改.
例如在银行转账的例子能够清楚的体现事务的重要性.
String sql1="update bank set money=money-100 where username='李四'";String sql2="update bank set money=money+100 where username='张三'";
我们可以看到银行的两个用户张三,李四的存取操作必须同时进行,此时我们就要将这两条sql语句放在事务中执行.
我们在对事务的编写也要掌握一定的顺序;
1:首先我们必须将事务的默认自动提交关闭将其默认值设置为false;
conn.setAutoCommit(false);
2:接下来我们要设置回滚点,当处理事务出现异常时,将数据回滚到未执行sql语句的状态,这样就会避免程序异常带来的麻烦.
setSavepoint = conn.setSavepoint();
3:将添加事务的sql语句放在try….catch 语句中
4:然后在catch语句中编写回滚语句,当执行事务当中出现异常时,将数据回滚到回滚点.
conn.rollback(setSavepoint);
5:最后在finally代码块中提交事务,(这个的前提是整个操作中无异常时)
conn.commit();
6:最终释放掉资源,这个事务就算编写完成.
示例代码:
package JDBC_Utils_demo;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Savepoint;public class JDBC_test1_sw { public static void main(String[] args) { Connection conn = null; PreparedStatement statement1 = null; PreparedStatement statement2 = null; Savepoint setSavepoint = null; try { // 1:获取链接对象 conn = Utils.getconnection(); // 2:开启事务,将数据自动提交关闭 conn.setAutoCommit(false); // 3:设置回滚点 setSavepoint = conn.setSavepoint(); // 4:定义sql语句 String sql1 = "update bank set money=money-100 where username='李四'"; String sql2 = "update bank set money=money+100 where username='张三'"; statement1 = conn.prepareStatement(sql1); statement1.executeUpdate(); //当执行完第一条sql语句的时候,在这里我们设置了一个异常 System.out.println(1 / 0); statement2 = conn.prepareStatement(sql2); statement2.executeUpdate(); } catch (Exception e) { try { //如果出现异常,回滚到设置的回滚点 conn.rollback(setSavepoint); } catch (SQLException e1) { e1.printStackTrace(); } } finally { try { // 没有异常出现的时候,提交事务 conn.commit(); } catch (SQLException e) { e.printStackTrace(); } try { //最后调用工具类,释放资源. Utils.close(conn, statement1); } catch (SQLException e) { e.printStackTrace(); } try { Utils.close(conn, statement2); } catch (SQLException e) { e.printStackTrace(); } } }}
执行完上述代码,我们在数据库中的bank表的数据在出现异常的情况下就不会改变.
阅读全文
0 0
- JDBC_事务的使用
- JDBC_事务
- 20_传智播客JDBC_事务的概念与JDBC事务处理
- 第二十一章 JDBC_事务的保存点处理
- JDBC_使用DriverManager实现数据库的连接
- JDBC_面对对象的使用方式
- JDBC_使用Driver接口实现数据库的连接
- java自学之路-----jdbc_事务and连接池
- 第十九章 JDBC_使用DAO工厂模式
- JDBC_使用PreparedStatement执行update操作
- JDBC_获取插入记录的主键值
- JDBC_通过JDBC获得的元数据
- JDBC_使用 Statement 执行更新操作(基于oracle数据库)
- JDBC_使用ResultSet 执行查询操作(基于oracle数据库)
- EJB3事务的使用
- 使用事务的代码
- sql事务的使用
- 事务的使用
- Linux下的相关帮助命令
- 安装 elasticsearch-head-master 插件
- python AES 双向对称加密解密
- 图像的卷积及相关
- linux syscall系统调用获取线程PID
- JDBC_事务的使用
- 从零开始的web前端
- 光源选型的要素有哪些?
- 简单密码
- 机器学习——特征工程之概述
- R--组比较:表和可视化
- SharedPreferences实现数据存取
- oracle重新安装注意
- (springmvc+spring+mabatis)配置