1. 什么叫事务
    1. 一组逻辑单元,使数据从一种状态换到另一种状态
  2. 事务的处理原则
    1. 保证所有事务都作为一个工作单元执行,即使出现了故障,都不能改变这种执行方式
    2. 当在一个事务执行多操作时,要么所有的事务都被提交(commi), 那么这些修改就永久地保存下来,要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初的状态
  3. 哪些操作会导致数据的提交
    1. DDL操作一旦执行,都会提交
    2. DML默认情况下一旦执行,都会提交
    3. 关闭连接时,会自动提交
  4. connection.setTransactionIsolation(找Connection类中的静态常量); // 修改事务级别

代码实现

  1. public static void main(String[] args) throws Exception {
  2. ConnectionTest connectionTest = new ConnectionTest();
  3. Connection connection = null;
  4. try {
  5. connection = ConnSql.conncationSql();// 创建连接对象
  6. String sql1 = "UPDATE student SET sage = sage + 1 WHERE sid = ?";
  7. String sql2 = "UPDATE student SET sage = sage - 1 WHERE sid = ?";
  8. connectionTest.testTx(connection, sql1, 1); // 执行sql语句(使用下面的方法)
  9. // System.out.println(10 / 0);
  10. connectionTest.testTx(connection, sql2, 2);// 执行sql语句(使用下面的方法)
  11. connection.commit();
  12. } catch (Exception e) {
  13. if (connection != null)
  14. connection.rollback(); // 如果sql语句执行中出现问题,立即回滚
  15. } finally {
  16. if (connection != null) {
  17. connection.close();
  18. }
  19. }
  20. }
  1. // 连接对象通过参数传递
  2. public void testTx(Connection connection, String sql, Object... agrs) {
  3. PreparedStatement preparedStatement = null;
  4. try {
  5. connection.setAutoCommit(false); // 设置不自动提交
  6. preparedStatement = connection.prepareStatement(sql);
  7. for (int i = 0; i < agrs.length; i++) {
  8. preparedStatement.setObject(i + 1, agrs[i]);
  9. }
  10. preparedStatement.executeUpdate(); // 执行语句
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. } finally {
  14. ConnSql.close(null, preparedStatement);
  15. }
  16. }