JDBC 通过DriverManager接口获取数据库连接(2)

2020-03-17 15:13:51 浏览数 (1)

JDBC接口(API)

  • 提供了一套纯粹的JAVA API给应用程序开发者
  • 提供了一套低级别的JDBC driver API给数据库驱动开发者

应用程序开发者借助于API用于开发可以访问数据库的程序; 驱动开发者借助于API提供服务到JDBC

提供给数据库驱动开发者的API则正好是为了实现提供给应用程序开发者的这套API,这句话有些令人迷惑

JDBC是对数据库操作访问的薄层封装,应用程序开发者借助于JDBC可以实现对数据库的操作访问,但是,最终提供的服务仍旧是具体的数据库实现了具体SQL的执行 所以JDBC提供给应用程序开发者的API就是开发者使用JDBC数据库的接口而提供给数据库驱动开发者的API则恰恰是为了让数据库驱动开发者来提供服务

通过DriverManager类的getConnection()方法建立数据库连接

代码语言:javascript复制
public Connection myTest01() throws Exception{
    // 1.准备连接数据库的4个字符串
    // 驱动的全类名
    String driverClass = null;
    // JDBC URL
    String jdbcUrl = null;
    // user
    String user = null;
    // password
    String password = null;
    // 读取类路径下的jdbc.properties 文件
    InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
    Properties properties = new Properties();
    properties.load(in);
    driverClass = properties.getProperty("driver");
    jdbcUrl = properties.getProperty("jdbcUrl");
    user = properties.getProperty("user");
    password = properties.getProperty("password");
    // 2. 加载数据库驱动程序
    Class.forName(driverClass);
    // 3. 通过DriverManager 的getConnection()方法获取数据库连接
    Connection connection = DriverManager.getConnection(jdbcUrl,user,password);
    return connection;
}
代码语言:javascript复制
// 注册驱动的两种写法
DriverManager.registerDriver(Class.forName(driverClass).newInstance) // 第一种写法
Class.forName(driverClass); // 第二种写法
// 支持第二种写法的原因是 在加载驱动的时,com.mysql.cj.jdbc.Driver中有静态代码块会被执行,静态代码块创建了当前类的实例,注册到了DriverManager,所以可以直接用第二种写法
// 以下源码
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!");
        }
    }
}

0 人点赞