DriverManager 是 JDBC 管理層,介於應用與驅動程式之間:追蹤可用驅動、建立資料庫連線、處理驅動註冊逾時與日誌追蹤。簡單應用僅需直接呼叫 DriverManager.getConnection(),讓管理層處理連線細節。
所有驅動類別必須包含 **靜態初始化區塊**,建立自身實例並呼叫 DriverManager.registerDriver(this)。開發者**無需手動呼叫** registerDriver,載入驅動類別即自動完成註冊。兩種載入方式:
Class.forName("acme.db.Driver");
acme.db.Driver 靜態區塊建立實例並註冊 (標準做法),即可用於建立連線。於 ~/.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 列出者優先) 測試各驅動:
Driver.connect(url, props),傳入 URL 與屬性 (含使用者/密碼)。Connection。雖看似逐一嘗試效率低,但實際載入驅動數極少,僅需幾次方法呼叫與字串比對。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 載入驅動
String url = "jdbc:odbc:fred"; // ODBC 資料源名稱
Connection conn = DriverManager.getConnection(url, "userID", "passwd");
理解驅動載入與註冊機制,掌握 Class.forName() 最佳實踐與類別載入器安全隔離原理,是 JDBC 穩健連線資料庫的第一步。讓 DriverManager 管理連線細節,專注於業務邏輯開發。