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