Connection

Connection 中可以控制事务的生命周期,可以设置事务的隔离级别,


事务控制

在一个Connection 中,上次持久化的结束为事务的开始,下次持久化的结束为事务的结束。调用一次Commit()意味着一个事务的结束。

commit 提交事物

void commit()
            throws SQLException
使所有上一次提交/回滚后进行的更改成为持久更改,并释放此  Connection 对象当前持有的所有数据库锁。此方法只应该在已禁用自动提交模式时使用。

rollback 回滚事物

void rollback()
              throws SQLException
取消在当前事务中进行的所有更改,并释放此  Connection 对象当前持有的所有数据库锁。此方法只应该在已禁用自动提交模式时使用

setAutoCommit

void setAutoCommit(boolean autoCommit)
                   throws SQLException
将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则它的所有 SQL 语句将被执行并作为单个事务提交。否则,它的 SQL 语句将聚集到事务中,直到调用  commit 方法或  rollback 方法为止。默认情况下,新连接处于自动提交模式。

提交发生在语句完成时。语句完成的时间取决于 SQL 语句的类型:

  • 对于 DML 语句(比如 Insert、Update 或 Delete)和 DDL 语句,语句在执行完毕时完成。
  • 对于 Select 语句,语句在关联结果集关闭时完成。
  • 对于 CallableStatement 对象或者返回多个结果的语句,语句在所有关联结果集关闭并且已获得所有更新计数和输出参数时完成。

注:如果在事务和自动提交模式更改期间调用此方法,则提交该事务。如果调用 setAutoCommit 而自动提交模式未更改,则该调用无操作(no-op

setSavepoint

Savepoint setSavepoint()
                       throws SQLException
在当前事务中创建一个未命名的保存点 (savepoint),并返回表示它的新  Savepoint 对象。

如果在活动事务范围之外调用 setSavepoint,则将在新创建的保存点上启动事务。

返回:
新的  Savepoint 对象
抛出:
SQLException - 如果发生数据库访问错误,在参与分布式事务的同时调用此方法,在关闭的连接上调用此方法,或者此  Connection 对象当前处于自动提交模式
SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法
从以下版本开始:


setSavepoint

Savepoint setSavepoint(String name)
                       throws SQLException
在当前事务中创建一个具有给定名称的保存点,并返回表示它的新  Savepoint 对象。

如果在活动事务范围之外调用 setSavepoint,则将在新创建的保存点上启动事务。

参数:
name - 包含保存点名称的  String
返回:
新的  Savepoint 对象
抛出:
SQLException - 如果发生数据库访问错误,在参与分布式事务的同时调用此方法,在关闭的连接上调用此方法,或者此  Connection 对象当前处于自动提交模式下
SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法
从以下版本开始:


rollback

void rollback(Savepoint savepoint)
              throws SQLException
取消所有设置给定  Savepoint 对象之后进行的更改。

此方法只应该在已禁用自动提交时使用。

参数:
savepoint - 要回滚到的  Savepoint 对象
抛出:
SQLException - 如果发生数据库访问错误,在参与分布式事务的同时调用此方法,在关闭的连接上调用此方法, Savepoint 对象不再有效,或者此  Connection 对象当前处于自动提交模式
SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法
从以下版本开始:


releaseSavepoint

void releaseSavepoint(Savepoint savepoint)
                      throws SQLException
从当前事务中移除指定的  Savepoint 和后续  Savepoint 对象。在已移除保存点之后,对该保存点的任何引用都会导致抛出  SQLException

参数:
savepoint - 将移除的  Savepoint 对象
抛出:
SQLException - 如果发生数据库访问错误,在关闭的连接上调用此方法,或者给定  Savepoint 对象在当前事务中不是一个有效的保存点
SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法


JDBC 隔离级别

TRANSACTION_READ_UNCOMMITTED

一个事物可以读取到另一个事务未提交的更新。此隔离级别存在脏度,不可重复读,幻读的风险。

TRANSACTION_READ_COMMITTED

一个事物不可以读取到另一个事务未提交的更新。此隔离级别解决了脏度,但存在不可重复读,幻读的风险。

TRANSACTION_REPEATABLE_READ

在一个事物务中一条记录两次读取的结果相同。此隔离级别解决了脏度,不可重复读,但存在幻读的风险。select * for update


TRANSACTION_SERIALIZABLE

同一个表两次读取的结果集相同。此隔离级别解决了脏度,不可重复读,幻读的风险。在表级别加锁

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值