JDBC中的事务

事务能够控制是否和何时更改应用于数据库,将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,则整个事务将失败
JDBC驱动程序默认使用自动提交模式,每个SQL语句在完成后都会提交到数据库

  • 启用手动事务支持:
    使用Connection对象的setAutoCommit()方法

connection.setAutoCommit(false);//关闭自动提交事务

如果将boolean false传递给setAutoCommit()则关闭自动提交,可以通过传递布尔值true重新打开它

  • 完成更改后,在连接对象上调用commit()方法提交事务

connection.commit();//手动提交事务

  • 如果不提交事务或者发生错误,则进行回滚更新

connection.rollback();

保存点Savepoints

Savepoint接口提供了额外的事务控制
设置保存点时,可以在事务中定义逻辑回滚点,如果发生异常,则可以使用回滚方法来撤消所有更改仅保存在保存点之前所做的更改

Connection对象有两种新的方法管理保存点 :
image.png

例如:

  • 在result1和result2之间定义回滚点savepoint1

    1. savepoint1 = connection.setSavepoint("Savepoint1");
  • 异常处理的catch中设置回滚到保存点,并提交保存点之前的事务

    connection.rollback(savepoint1);//回滚到保存点
    connection.commit();//提交事务,即保存点之前的事务

事务案例——转账

转账问题中转入和转出两个账户的余额变化就是典型的事务案例,一个账户余额增加的同时,另一个转出的账户的余额必然随之减少,这可以看作是一整个事务

根据业务逻辑:
手动提交:如果转账没有问题,则执行成功
如果转账过程中出现异常,则会回滚到事务执行前的状态,数据不会发生改变,逻辑可行
自动提交:如果转账过程中出现了异常,但是已经执行的sql语句已经自动提交,不符合业务逻辑

批处理

状态通道(statement)批处理

statement.addBatch(x);
statement.executeBatch();
image.png

预状态通道(preparedStatement)批处理

pps.setString(a,b);
pps.addBatch();
pps.executeBatch();

image.png

反射处理结果集

https://blog.csdn.net/m0_50609545/article/details/119827306?spm=1001.2014.3001.5501

JDBC中自定义工具类

封装优化(properties配置文件)

https://blog.csdn.net/m0_50609545/article/details/119831922?spm=1001.2014.3001.5501

连接池

https://blog.csdn.net/m0_50609545/article/details/119834782?spm=1001.2014.3001.5501