JSP學習——全面解析JDBC(8)附錄

來源:互聯網
上載者:User
js 附錄:JDBC TM技術解析

  1. JDBCTM的定義

  JDBCTM 是一種用於執行 SQL 陳述式的 JavaTM API,它由一組用 Java 程式設計語言編寫的類和介面組成。JDBC 為工具/資料庫開發人員提供了一個標準的API,使他們能夠用純 Java API 來編寫資料庫應用程式。

  有了 JDBC,向各種關聯式資料庫發送 SQL 陳述式就是一件很容易的事。換言之,有了 JDBC API,就不必為訪問 Sybase 資料庫專門寫一個程式,為訪問 Oracle 資料庫又專門寫一個程式,為訪問 Informix 資料庫又寫另一個程式,等等。您只需用 JDBC API 寫一個程式就夠了它可向相應資料庫發送 SQL 陳述式。而且,使用 Java 程式設計語言編寫的應用程式,就無須去憂慮要為不同的平台編寫不同的應用程式。將Java 和 JDBC 結合起來將使程式員只須寫一遍程式就可讓它在任何平台上運行。

  Java 具有堅固、安全、便於使用、易於理解和可從網路上自動下載等特性,是編寫資料庫應用程式的傑出語言。所需要的只是 Java應用程式與各種不同資料庫之間進行對話的方法。而 JDBC 正是作為此種用途的機制。

  JDBC 擴充了 Java 的功能。例如,用 Java 和 JDBC API 發行就緒含有 applet 的網頁,而該 applet 使用的資訊可能來自遠端資料庫企業也可以用 JDBC 通過 Intranet 將所有職員連到一個或多個內部資料庫中(即使這些職員所用的電腦有 Windows、 Macintosh 和UNIX 等各種不同的作業系統)。隨著越來越多的程式員開始使用Java 程式設計語言,對從 Java 中便捷地訪問資料庫的要求也在日益增加。

  MIS 管理員們都喜歡 Java 和 JDBC 的結合,因為它使資訊傳播變得容易和經濟。企業可繼續使用它們安裝好的資料庫,並能便捷地存取資訊,即使這些資訊是儲存在不同資料庫管理系統上。新程式的開發期很短。安裝和版本控制將大為簡化。程式員可只編寫一遍應用程式或只更新一次,然後將它放到伺服器上,隨後任何人就都可得到最新版本的應用程式。對於商務上的銷售資訊服務, Java 和JDBC 可為外部客戶提供擷取資訊更新的更好方法。

  2. JDBC 的用途

  簡單地說,JDBC 可做三件事:與資料庫建立串連、發送 SQL 陳述式並處理結果。下列程式碼片段給出了以上三步的基本樣本:


Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login",
"password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}

  上述代碼對基於JDBC的資料庫訪問做了經典的總結,當然,在本小節的後續部分會對它做詳盡的分析講解。

  3. JDBC API

  JDBC 是個"低級"介面,也就是說,它用於直接調用 SQL 命令。在這方面它的功能極佳,並比其它的資料庫連接 API 便於使用,但它同時也被設計為一種基礎介面,在它之上可以建立進階介面和工具。進階介面是"對方便使用的"介面,它使用的是一種更易理解和更為方便的 API,這種API在幕後被轉換為諸如 JDBC 這樣的低級介面。

  在關聯式資料庫的"對象/關係"映射中,表中的每行對應於類的一個執行個體,而每列的值對應於該執行個體的一個屬性。於是,程式員可直接對 Java 對象進行操作;存取資料所需的 SQL 調用將在"掩蓋下"自動產生。此外還可提供更複雜的映射,例如將多個表中的行結合進一個 Java 類中。

  隨著人們對 JDBC 的興趣日益增漲,越來越多的開發人員一直在使用基於 JDBC 的工具,以使程式的編寫更加容易。程式員也一直在編寫力圖使終端使用者對資料庫的訪問變得更為簡單的應用程式。例如應用程式可提供一個選擇資料庫任務的菜單。任務被選定後,應用程式將給出提示及空白供填寫執行選定任務所需的資訊。所需資訊輸入應用程式將自動調用所需的 SQL 命令。在這樣一種程式的協助下,即使使用者根本不懂 SQL 的文法,也可以執行資料庫任務。

  4. JDBC與ODBC和其它API的比較

  目前,Microsoft 的 ODBC API 可能是使用最廣的、用於訪問關聯式資料庫的編程介面。它能在幾乎所有平台上串連幾乎所有的資料庫。為什麼 Java 不使用 ODBC?對這個問題的回答是:Java 可以使用 ODBC,但最好是在 JDBC 的協助下以 JDBC-ODBC 橋的形式使用,這一點我們稍後再說。現在的問題已變成:"為什麼需要 JDBC"?答案是顯然的:ODBC 不適合直接在 Java 中使用,因為它使用 C 語言介面。從Java 調用本地 C 代碼在安全性、實現、堅固性和程式的自動移植性方面都有許多缺點。從 ODBC C API 到 Java API 的字面翻譯是不可取的。例如,Java 沒有指標,而 ODBC 卻對指標用得很廣泛(包括很容易出錯的指標"void *")。您可以將 JDBC 想象成被轉換為物件導向介面的 ODBC,而物件導向的介面對 Java 程式員來說較易於接收。

  ODBC 很難學。它把簡單和進階功能混在一起,而且即使對於簡單的查詢,其選項也極為複雜。相反,JDBC 盡量保證簡易功能的簡便性,而同時在必要時允許使用進階功能。啟用"純 Java "機制需要象 JDBC 這樣的 Java API。如果使用ODBC,就必須手動地將 ODBC 驅動程式管理器和驅動程式安裝在每台客戶機上。如果完全用 Java 編寫 JDBC 驅動程式則 JDBC 代碼在所有 Java 平台上(從網路電腦到大型主機)都可以自 動安裝、移植並保證安全性。

  總之,JDBC API 對於基本的 SQL 抽象和概念是一種自然的 Java 介面。它建立在 ODBC 上而不是從零開始。因此,熟悉 ODBC 的程式員將發現 JDBC 很容易使用。JDBC 保留了 ODBC 的基本設計特徵;事實上,兩種介面都基於 X/Open SQL CLI(調用級介面)。它們之間最大的區別在於:JDBC 以 Java 風格與優點為基礎並進行最佳化,因此更加便於使用。

  目前,Microsoft 又引進了 ODBC 之外的新 API: RDO、 ADO 和OLE DB。這些設計在許多方面與 JDBC 是相同的,即它們都是物件導向的資料庫介面且基於可在 ODBC 上實現的類。但在這些介面中,我們未看見有特別的功能使我們要轉而選擇它們來替代 ODBC,尤其是在 ODBC 驅動程式已建立起較為完善的市場的情況下。它們最多也就是在 ODBC 上加了一種裝飾而已。

  5. JDBC對B/S和C/S模式的支援

  JDBC API 既支援資料庫訪問的兩層模型(C/S),同時也支援三層模型(B/S)。在兩層模型中,Java applet或應用程式將直接與資料庫進行對話。這將需要一個JDBC驅動程式來與所訪問的特定資料庫管理系統進行 通訊。使用者的SQL語句被送往資料庫中,而其結果將被送回給使用者。資料庫可以位於另一台電腦上,使用者通過網路連接到上面。這就叫做客戶機/伺服器配置,其中使用者的電腦為客戶機,提供資料庫的電腦為伺服器。網路可以是 Intranet(它可將公司職員串連起來),也可以是 Internet。

  在三層模型中,命令先是被發送到服務的"中介層",然後由它將SQL 陳述式發送給資料庫。資料庫對 SQL 陳述式進行處理並將結果送回到中介層,中介層再將結果送回給使用者。MIS 主管們都發現三層模型很吸引人,因為可用中介層來控制對公司資料的訪問和可作的的更新的種類。中介層的另一個好處是,使用者可以利用便於使用的進階API,而中介層將把它轉換為相應的低級調用。最後,許多情況下三層結構可提供一些效能上的好處。

  到目前為止,中介層通常都用 C 或 C++ 這類語言來編寫,這些語言執行速度較快。然而,隨著最佳化編譯器(它把 Java 位元組代碼轉換為高效的特定於機器的代碼)的引入,用 Java 來實現中介層將變得越來越實際。這將是一個很大的進步,它使人們可以充分利用 Java 的諸多優點(如堅固、多線程和安全等特徵)。JDBC 對於從Java的中介層來訪問資料庫非常重要。

  6. SQL 的一致性

  結構化查詢語言 (SQL) (SQL) 是訪問關聯式資料庫的標準語言。困難之處在於:雖然大多數的 DBMS (資料庫管理系統)對其準系統都使用了標準形式的 SQL,但它們卻不符合最近為更進階的功能定義的標準 SQL 文法或語義。例如,並非所有的資料庫都支援儲存程式或外部串連,那些支援這一功能的資料庫又相互不一致。人們希望 SQL 中真正標準的那部份能夠進行擴充以包括越來越多的功能。但同時 JDBC API 又必須支援現有的 SQL。

  JDBC API 解決這個問題的一種方法是允許將任何查詢字串一直傳到所涉及的 DBMS 驅動程式上。這意味著應用程式可以使用任意多的 SQL 功能,但它必須冒這樣的風險:有可能在某些 DBMS 上出錯。事實上,應用程式查詢甚至不一定要是 SQL,或者說它可以是個為特定的 DBMS 設計的 SQL 的專用派生物(例如,文檔或圖象查詢)。

  JDBC 處理 SQL 一致性問題的第二種方法是提供 ODBC 風格的轉義子句,這將在後續部分中討論。轉義文法為幾個常見的 SQL 分歧提供了一種標準的 JDBC 文法。例如,對日期文字和已儲存過程的調用都有轉義文法。

  對於複雜的應用程式,JDBC 用第三種方法來處理 SQL 的一致性問題它利用 DatabaseMetaData 介面來提供關於 DBMS 的描述性資訊,從而使應用程式能適應每個 DBMS 的要求和功能。

  由於 JDBC API 將用作開發進階資料庫訪問工具和 API 的基礎 API,因此它還必須注意其所有上層建築的一致性。"符合JDBC標準TM" 代表使用者可依賴的 JDBC 功能的標準層級。要使用這一說明,驅動程式至少必須支援 ANSI SQL-2 Entry Level(ANSI SQL-2 代表美國國家標準局 1992 年所採用的標準。Entry Level代表SQL功能的特定清單)。驅動程式開發人員可用 JDBC API 所帶的測試載入器包來確定他們的驅動程式是否符合這些標準。

  "符合 JDBC 標準TM" 表示提供者的 JDBC 實現已經通過了JavaSoft 提供的一致性測試。這些一致性測試將檢查 JDBC API中定義的所有類和方法是否都存在,並儘可能地檢查程式是否具有SQL Entry Level 功能。當然,這些測試並不完全,而且 JavaSoft 目前也無意對各提供者的實現進行標級。但這種一致性定義的確可對JDBC實現提供一定的可信度。隨著越來越多的資料庫提供者、串連提供者、Internet 提供者和應用程式編程員對 JDBC API 的接受,JDBC 也正迅速成為 Java 資料庫訪問的標準。




相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。