首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDBC 基礎教學:驅動程式載入與註冊機制詳解

     編輯:Java 相關知識

前言:DriverManager 的管理者角色

DriverManager 是 JDBC 管理層,介於應用與驅動程式之間:追蹤可用驅動、建立資料庫連線、處理驅動註冊逾時與日誌追蹤。簡單應用僅需直接呼叫 DriverManager.getConnection(),讓管理層處理連線細節。

一、驅動程式自動註冊機制

所有驅動類別必須包含 **靜態初始化區塊**,建立自身實例並呼叫 DriverManager.registerDriver(this)。開發者**無需手動呼叫** registerDriver,載入驅動類別即自動完成註冊。兩種載入方式:

1. Class.forName() 顯式載入 (推薦)

Class.forName("acme.db.Driver");
  • 與外部設定無關,程式碼自描述性強。
  • 若 acme.db.Driver 靜態區塊建立實例並註冊 (標準做法),即可用於建立連線。

2. 系統屬性 jdbc.drivers 隱式載入

於 ~/.hotjava/properties 或啟動參數 -Djdbc.drivers=... 設定:

jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver
  • DriverManager 類別初始化時讀取此屬性,嘗試載入列出的驅動類別。
  • 需持久化環境支援,不如 Class.forName() 可靠。
  • DriverManager 初始化後不再檢查此屬性,動態新增驅動無效。

安全機制:類別載入器隔離

JDBC 管理層追蹤**哪個類別載入器載入哪個驅動**。建立連線時,僅使用本地檔案系統或與請求代碼相同類別載入器載入的驅動**,防止不受信任代碼注入惡意驅動。

二、建立資料庫連線

驅動註冊後,呼叫 DriverManager.getConnection(url, user, pass)。管理層按註冊順序 (jdbc.drivers 列出者優先) 測試各驅動:

  1. 跳過不可信任載入器的驅動 (除非與請求者同載入器)。
  2. 對每個驅動呼叫 Driver.connect(url, props),傳入 URL 與屬性 (含使用者/密碼)。
  3. **第一個識別 URL 的驅動獲勝**,建立連線並回傳 Connection。

雖看似逐一嘗試效率低,但實際載入驅動數極少,僅需幾次方法呼叫與字串比對。

標準連線範例 (JDBC-ODBC Bridge)

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  // 載入驅動
String url = "jdbc:odbc:fred";                  // ODBC 資料源名稱
Connection conn = DriverManager.getConnection(url, "userID", "passwd");

結語

理解驅動載入與註冊機制,掌握 Class.forName() 最佳實踐與類別載入器安全隔離原理,是 JDBC 穩健連線資料庫的第一步。讓 DriverManager 管理連線細節,專注於業務邏輯開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved