一、JDBC事务配置
JDBC事务是对数据库操作的一组原子性、一致性、隔离性、持久性操作。在JDBC中使用事务需要先进行事务配置,在连接数据源时设置连接参数:
connection.setAutoCommit(false);
这句代码表示将自动提交关闭,即开启事务,否则每个SQL语句都会自动提交,无法形成事务。
二、JDBC事务开始于组成当前的事务
JDBC事务是从调用beginTransaction方法开始的,这个方法需要在创建数据库连接之后,进行以下操作:
connection.setAutoCommit(false);
开始事务:
connection.beginTransaction();
在事务中执行相关操作:
PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "test"); ps.execute();
提交事务:
connection.commit();
三、JDBC事务隔离级别
JDBC事务隔离级别分为四个级别: 读未提交(READ_UNCOMMITTED)、读已提交(READ_COMMITTED)、可重复读(REPEATABLE_READ)、序列化(SERIALIZABLE)。不同隔离级别之间的区别,主要在于事务会话之间的相互影响。
例如,当一个事务正在修改一条数据时,另一个事务不能同时修改此数据。在不同的隔离级别下,这个规定会存在不同的表现:
- READ_UNCOMMITTED: 允许一个事务读取另一个事务未提交的数据,会发生数据不一致的问题。
- READ_COMMITTED: 一个事务只能读取另一个事务已经提交的数据。
- REPEATABLE_READ: 确保事务对数据库查询的结果是一致的,保证对相同的查询条件返回相同的结果而不管其他事务对同一数据库的操作。
- SERIALIZABLE: 事务操作串行化,防止两个事务同时访问一个资源。
四、JDBC事务属于容器事务
JavaEE应用程序运行在容器环境中,容器可以管理应用程序的所有资源,包括JDBC连接资源和JDBC事务资源。JDBC事务是与容器一起工作的,因此可以实现分布式事务。
五、JDBC事务回滚
JDBC事务回滚是指当一个事务发生错误时,将事务回滚到事务开始前的状态,以保证数据的一致性。在JDBC中可以使用以下方法进行事务回滚:
catch (SQLException e) { connection.rollback(); }
六、JDBC事务由什么控制
JDBC事务由JDBC驱动和底层数据库共同控制。JDBC驱动通过JDBC API提供的事务方法来管理事务,底层数据库使用数据库特定的事务支持方式,例如MySQL使用InnoDB引擎的实现方式为行锁。
七、JDBC事务使用步骤
在JDBC中使用事务,步骤如下:
- 第一步,获取连接
- 第二步,开启事务
- 第三步,执行相关操作
- 第四步,提交事务
- 第五步,关闭连接
// 获取连接 Connection connection = DriverManager.getConnection(url, user, password); // 开始事务 connection.setAutoCommit(false); // 执行相关操作 PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "test"); ps.execute(); // 提交事务 connection.commit(); // 关闭连接 connection.close();
八、JDBC事务描述错误的是
JDBC事务遵循ACID原则,是原子性、一致性、隔离性、持久性事务。若数据库对某一行加锁而导致死锁的情况下,恰好该行受到要操作的锁的影响,则由于数据库锁定机制会自动执行回滚,这种情况下会失去部分持久性。
九、JDBC事务四大特性
JDBC事务具有四大特性:原子性、一致性、隔离性、持久性。
- 原子性:事务是一个不可分割的工作单位,事务中的操作要么全部执行成功,要么全部执行失败,不会出现部分执行成功的情况。
- 一致性:事务执行前后,数据库的完整性约束没有被破坏。
- 隔离性:事务与事务之间是相互独立的,在同一时刻,不会同时操作同一数据。
- 持久性:事务执行成功后,对数据库的修改是永久的,即使系统崩溃或电源故障,数据也不会丢失。
十、JDBC事务属于容器事务类型
JDBC是与容器一起工作的,事务是容器提供的标准JavaEE服务之一,因此JDBC事务属于容器事务类型。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/195276.html