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

JDBC 接口 ( API )

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

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

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

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

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

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;
}
// 注册驱动的两种写法
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!");
        }
    }
}

你可能感兴趣的:(JDBC 通过 DriverManager 接口获取数据库连接)