美文网首页
JDBC之API详解(Connection)

JDBC之API详解(Connection)

作者: 每天起床都想摆 | 来源:发表于2021-12-14 01:24 被阅读0次

    Connection

    • Connection(数据库连接对象)作用:
      1. 获取执行SQL的对象
      2. 管理事务

    1. 获取执行SQL的对象

      • 普通执行SQL对象

        Statement createStatement()
        
    • 预编译SQL的执行SQL对象:防止SQL注入

      PreparedStatement prepareStatement(sql)
      
    • 执行存储过程的对象

      CallableStatement prepareCall(sql)
      
    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();
        
            }
        }
        

    相关文章

      网友评论

          本文标题:JDBC之API详解(Connection)

          本文链接:https://www.haomeiwen.com/subject/gserfrtx.html