JDBC之API详解(Connection)

2021-12-14  本文已影响0人  每天起床都想摆

Connection

  1. 获取执行SQL的对象

    • 普通执行SQL对象

      Statement createStatement()
      
  1. 事务管理

    • MySQL事务管理

      (详见SQL-多表查询-事务-操作)

    • JDBC事务管理:Connection接口中定义了3个对应的方法

      //开启事务:(boolean作为参数:true为自动提交事务;false为手动提交事务(即为开启事务))
      setAutoCommit(boolean autoCommit)
      //例如开启事务   coon. setAutoCommit(false)
        
      //提交事务
      commit()
      //回滚事务
      rollback()
      

      JDBC事务管理:

      //JDBC中模拟在代码执行过程中的开启,回滚,提交可以使用Java异常处理机制来实现
      
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;
      import java.sql.Statement;
      
      public class JDBCDemo {
          public static void main(String[] args) throws Exception {
              //1.注册驱动(此语句在MySQL5版本之后已经不用主动书写)
              // 该语句封装在了数据库驱动包目录下MEAT-INF/services下)
              Class.forName("com.mysql.cj.jdbc.Driver");
      
              //2.获取连接
              //String url = "jdbc:mysql://127.0.0.1:3306/school";
              //加上参数键值对禁用安全连接方式,解决警告提示
              //(此处参数键值对还可以附加useServerPrepStmts = true来开启SQL预编译功能)
              String url = "jdbc:mysql://127.0.0.1:3306/school?useSSL = false";
              String username = "root";
              String password = "ZZXQJL@0916.com";
              Connection coon = DriverManager.getConnection(url, username, password);
      
              //3.定义sql语句
              String sql1 = "update bank set income = 1000 where name = \"John\";";
              String sql2 = "update bank set income = 3000 where name = \"John\";";
              //4,获取执行sql的对象statement
              Statement stmt = coon.createStatement();
      
              //IDEA中按住Ctrl+Alt+T对光标选中代码块快速创建try...catch
              try {
                  //开启事务
                  coon.setAutoCommit(false);
      
                  //5.执行SQL1
                  int count1 = stmt.executeUpdate(sql1); //受影响的行数
                  //6.处理结果
                  System.out.println(count1);
      
                  int i = 3 / 0; //在两条SQL语句之间手动创建一个异常
                  // 捕获到异常类ArithmeticException(算术运算时发生的异常)
                  // 使得即使SQL1执行成功,SQL2执行失败,但是SQL的执行遭到了事务的管理
                  // 在执行完SQL1时触发catch中的回滚,导致两条SQL均未被执行
      
                  //5.执行SQL2
                  int count2 = stmt.executeUpdate(sql2); //受影响的行数
                  //6.处理结果
                  System.out.println(count2);
      
                  //如果没有异常,执行try,提交事务
                  coon.commit();
              } catch (SQLException throwables) {//此处原本为SQLException,为捕获更大的异常,将其更改为Exception
                  //捕获到异常,进行事务回滚
                  coon.rollback();
      
                  throwables.printStackTrace();
              }
      
              //7.释放资源
              stmt.close();
              coon.close();
      
          }
      }
      
上一篇下一篇

猜你喜欢

热点阅读