天天看點

JDBC 通過DriverManager接口擷取資料庫連接配接(2)

JDBC接口(API)

  • 提供了一套純粹的JAVA API給應用程式開發者
  • 提供了一套低級别的JDBC driver API給資料庫驅動開發者

應用程式開發者借助于API用于開發可以通路資料庫的程式;

驅動開發者借助于API提供服務到JDBC

JDBC 通過DriverManager接口擷取資料庫連接配接(2)

而提供給資料庫驅動開發者的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!");
        }
    }
}           

複制