Servlet JDBC两种注册驱动的方法

achong
2022-04-30 / 0 评论 / 46 阅读 / 正在检测是否收录...

第一种

用java.sql.DriverManager下的registerDriver( ) 方法注册驱动。传入一个Driver()对象即可。

1651302015701.png

// 1. 注册驱动
Driver driver = new Driver();
DriverManager.registerDriver(driver);
//合写成一句
DriverManager.registerDriver(new Driver());



第二种

Class.forName("com.mysql.jdbc.Driver");

第二种是较为常用的,因为比较简单。

原理:

先看一下Driver()方法的源码。在第五行有一个静态方法,静态方法里执行了注册驱动的语句。

所以第二种方法的原理是:反射这个类com.mysql.jdbcDriver,使这个类的静态代码块执行,驱动就注册成功了

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

用第二种方式注册驱动的完整JDBC代码 - 查

public class Query {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取数据库连接
            String url = "jdbc:mysql://127.0.0.1:3306/userdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong&allowPublicKeyRetrieval=true";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);
            //获取数据库操作对象
            stmt = conn.createStatement();
            //执行sql语句
            String sql = "select * from userinfo";
            rs = stmt.executeQuery(sql);
            //处理结果集
            while (rs.next()){
                String value = rs.getString("userId")+", "+rs.getString("userName");
                System.out.println(value);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            //关闭连接
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}
0

评论 (0)

取消