JDBCTM 指南:入門3 - DriverManager (轉)

worldblog發表於2007-12-08
JDBCTM 指南:入門3 - DriverManager (轉)[@more@]內容:
3 - Manager
3.1 概述
DriverManager 類是 JC 的管理層,作用於和之間。
它跟蹤可用的驅動程式,並在和相應驅動程式之間建立連線。
另外,DriverManager 類也處理諸如驅動程式登入時間限制及登入和
跟蹤訊息的顯示等事務。

對於簡單的應用程式,一般程式設計師需要在此類中直接使用的唯一方法
是 DriverManager.getConnection。正如名稱所示,該方法將建立與
資料庫的連線。 允許使用者 DriverManager 的方法
getDriver、getDrivers 和 registerDriver 及 Driver 的方法
connect。但多數情況下,讓 DriverManager 類管理建立連線的細
節為上策。


3.1.1 跟蹤可用驅動程式
DriverManager 類包含一列 Driver 類,它們已透過呼叫方法
DriverManager.registerDriver 對自己進行了註冊。所有 Driver
類都必須包含有一個靜態部分。它建立該類的例項,然後在載入該
例項時 DriverManager 類進行註冊。這樣,使用者正常情況下將不會
直接呼叫 DriverManager.registerDriver;而是在載入驅動程式時
由驅動程式自動呼叫。載入 Driver 類,然後自動在 DriverManager
中註冊的方式有兩種:


透過呼叫方法 Class.forName。這將顯式地載入驅動程式類。由於這
與外部設定無關,因此推薦使用這種載入驅動程式的方法。以下程式碼
載入類 acme.db.Driver:
Class.forName("acme.db.Driver");

如果將 acme.db.Driver 編寫為載入時建立例項,並呼叫以該例項為
引數的 DriverManager.registerDriver(本該如此),則它在
DriverManager 的驅動程式列表中,並可用於建立連線。


透過將驅動程式新增到 .lang.System 的屬性 jdbc.drivers 中
這是一個由 DriverManager 類載入的驅動程式類名的列表,由冒號
分隔:初始化 DriverManager 類時,它搜尋屬性 jdbc.drivers,
如果使用者已輸入了一個或多個驅動程式,則 DriverManager 類將試圖載入它們。
以下程式碼說明程式設計師如何在 ~/.hotjava/properties 中輸入三個驅動程式類(
啟動時,HotJava 將把它載入到系統屬性列表中):
jdbc.drivers=foo.bah.Driver:wombat..Driver:bad.test.ourDriver;

對 DriverManager 方法的第一次呼叫將自動載入這些驅動程式類。

注意:載入驅動程式的第二種方法需要持久的預設環境。如果對這一點不能
保證,則呼叫方法 Class.forName 顯式地載入每個驅動程式就顯得更為
。這也是引入特定驅動程式的方法,因為一旦 DriverManager 類被初始化,它
將不再檢查 jdbc.drivers 屬性列表。

在以上兩種情況中,新載入的 Driver 類都要透過呼叫 DriverManager.registerDriver
類進行自我註冊。如上所述,載入類時將自動這一過程。

由於安全方面的原因,JDBC 管理層將跟蹤哪個類載入器提供哪
個驅動程式。這樣,當 DriverManager 類開啟連線時,它僅使用
本地系統或與發出連線請求的程式碼相同的類載入器提供的驅動程式。


3.1.2 建立連線
載入 Driver 類並在 DriverManager 類中註冊後,它們即可用來與數
據庫建立連線。當呼叫 DriverManager.getConnection 方法發出連線
請求時,DriverManager 將檢查每個驅動程式,檢視它是否可以建立連線。

有時可能有多個 JDBC 驅動程式可以與給定的 URL 連線。例如,與
給定資料庫連線時,可以使用 JDBC-ODBC 橋驅動程式、JDBC 到
通用驅動程式或資料庫廠商提供的驅動程式。在這種情況下
測試驅動程式的順序至關重要,因為 DriverManager 將使用它所找到
的第一個可以成功連線到給定 URL 的驅動程式。

首先 DriverManager 試圖按註冊的順序使用每個驅動程式
(jdbc.drivers 中列出的驅動程式總是先註冊)。它將跳過程式碼不可
信任的驅動程式,除非載入它們的源與試圖開啟連線的程式碼的源相同。

它透過輪流在每個驅動程式上呼叫方法 Driver.connect,並向它們傳
遞使用者開始傳遞給方法 DriverManager.getConnection 的 URL 來對驅
動程式進行測試,然後連線第一個認出該 URL 的驅動程式。

這種方法初看起來不高,但由於不可能同時載入數十個驅動程式,
因此每次連線實際只需幾個過程呼叫和字串比較。

以下程式碼是通常情況下用驅動程式(例如 JDBC-ODBC 橋驅動程式)
建立連線所需所有步驟的示例:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //載入驅動程式
String url = "jdbc:odbc:fred";
DriverManager.getConnection(url, "userID", "passwd");


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989809/,如需轉載,請註明出處,否則將追究法律責任。

相關文章