jdbc是什麽?
JDBC為工具/數據庫開發者提供了標準的API,這樣可以構建更高級的工具和接口,數據庫開發者可以用純Java API編寫數據庫應用。同時,JDBC也是壹個品牌名稱。使用JDBC,很容易將SQL語句發送到各種關系數據。換句話說,有了JDBC API,就不需要專門為訪問Sybase數據庫寫壹個程序,專門為訪問Oracle數據庫寫另壹個程序,或者專門為訪問Informix數據庫寫另壹個程序等等。程序員只需要用JDBC API編寫壹個程序,就可以向相應的數據庫發送SQL調用。同時,Java語言和JDBC的結合,使得程序員不必為不同的平臺編寫不同的應用程序,只需編寫壹次程序就可以在任何平臺上運行,這也是Java語言“壹次編寫,隨處運行”的優勢。Java數據庫連接架構是Java應用程序連接數據庫的標準方法。JDBC是Java程序員的API,也是連接數據庫的服務提供商的接口模型。作為API,JDBC為程序開發提供了標準接口,為數據庫廠商和第三方中間件廠商提供了連接數據庫的標準方法。JDBC使用現有的SQL標準,並支持與其他數據庫連接標準(如ODBC)的橋接。JDBC已經實現了所有這些面向標準的目標,並且擁有簡單、嚴格的類型定義和高性能的接口。Java具有堅固、安全、易用、易理解、可從網絡自動下載的特點,是編寫數據庫應用程序的優秀語言。所需要的只是壹種在Java應用程序和各種數據庫之間對話的方式。JDBC是實現這壹目標的機制。JDBC擴展了Java的功能。例如,Java和JDBC API可用於發布包含小程序的網頁,小程序使用的信息可能來自遠程數據庫。企業還可以使用JDBC通過內部網將所有員工連接到壹個或多個內部數據庫(即使這些員工使用的計算機具有不同的操作系統,如Windows、Macintosh和UNIX)。隨著越來越多的程序員開始使用Java編程語言,從Java方便地訪問數據庫的需求也在增加。MIS管理員都喜歡Java和JDBC的結合,因為它使信息傳播既容易又經濟。即使信息存儲在不同的數據庫管理系統中,企業也可以繼續使用已安裝的數據庫並方便地訪問信息。新程序的開發周期很短。安裝和版本控制將大大簡化。程序員可以編寫壹次應用程序或者更新壹次,然後放在服務器上,然後任何人都可以獲得最新版本的應用程序。對於企業銷售信息服務,Java和JDBC可以為外部客戶提供更好的獲取信息更新的方法。簡單地說,JDBC可以做三件事:與數據庫建立連接,發送SQL語句並處理結果。以下代碼片段給出了上述三個步驟的基本示例:connection con = driver manager . getconnection(" JDBC:odbc:袋熊","登錄","密碼");statement stmt = con . create statement();ResultSet rs = stmt.executeQuery("從表1中選擇a,b,c ");while(RS . next()){ int x = RS . getint(" a ");string s = RS . getstring(" b ");float f = RS . get float(" c ");}上面的代碼對基於JDBC的數據庫訪問做了壹個經典的總結,當然在本節的後續部分會詳細分析和解釋。JDBC API JDBC是壹個“低級”接口,也就是說,它用於直接調用SQL命令。在這方面,它具有出色的功能,並且比其他數據庫連接API更容易使用,但它也是作為壹個基本接口而設計的,在這個基礎上可以構建高級接口和工具。高層接口是“用戶友好”的接口,使用更易理解、更方便的API,在幕後轉化為JDBC等低層接口。在關系數據庫的“對象/關系”映射中,表中的每壹行對應類的壹個實例,每壹列的值對應實例的壹個屬性。這樣,程序員可以直接操作Java對象;訪問數據所需的SQL調用將在後臺自動生成。此外,還可以提供更復雜的映射,比如將多個表中的行合並到壹個Java類中。隨著對JDBC越來越感興趣,越來越多的開發人員開始使用基於JDBC的工具來簡化編程。程序員也壹直在編寫應用程序,試圖讓最終用戶更容易訪問數據庫。例如,應用程序可以提供用於選擇數據庫任務的菜單。選擇任務後,應用程序將給出提示和空白,以填寫執行所選任務所需的信息。所需信息輸入應用程序將自動調用所需的SQL命令。在這樣壹個程序的幫助下,用戶即使完全不懂SQL的語法也可以執行數據庫任務。JDBC和ODBC的比較目前,微軟的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驅動程序管理器和驅動程序。如果JDBC驅動程序完全用Java編寫,JDBC代碼可以在所有Java平臺(從網絡計算機到大型機)上自動安裝、移植和保護。總之,JDBC API是基本SQL抽象和概念的自然Java接口。它建立在ODBC之上,而不是從零開始。因此,熟悉ODBC的程序員會發現JDBC很容易使用。JDBC保留了ODBC的基本設計特征;其實兩個接口都是基於X/Open SQL CLI(調用級接口)。兩者最大的區別在於,JDBC是基於Java風格和優點而優化的,所以更容易使用。目前,微軟已經推出了除ODBC之外的新API:RDO、ADO和OLE DB。這些設計在許多方面與JDBC相同,即它們都是面向對象的數據庫接口,並且基於可以在ODBC上實現的類。但是在這些接口中,我們看不到有什麽特殊的功能讓我們選擇它們而不是ODBC,尤其是在ODBC驅動已經建立了壹個相對完善的市場的情況下。他們最多只是在ODBC上加壹個裝飾。JDBC支持B/S和C/S,JDBC API支持兩層(C/S)和三層(B/S)的數據庫訪問模式。在兩層模型中,Java applet或應用程序將直接與數據庫對話。這將需要壹個JDBC驅動程序與被訪問的特定數據庫管理系統進行通信。用戶的SQL語句被發送到數據庫,結果將被發送回用戶。數據庫可以位於另壹臺計算機上,用戶可以通過網絡連接到它。這稱為客戶機/服務器配置,其中用戶的計算機是客戶機,提供數據庫的計算機是服務器。網絡可以是內部網(可以連接公司員工)或互聯網。在三層模型中,命令首先被發送到服務的“中間層”,然後它將SQL語句發送到數據庫。數據庫處理SQL語句並將結果發送回中間層,然後中間層將結果發送回用戶。MIS主管發現三層模型很有吸引力,因為中間層可以用來控制對公司數據的訪問和可以進行的更新類型。中間層的另壹個好處是,用戶可以使用易於使用的高級API,中間層會將其轉換成相應的低級調用。最後,在許多情況下,三層結構可以提供壹些性能優勢。到目前為止,中間層通常用C或C++等語言編寫,執行速度更快。但是,隨著優化編譯器(將Java字節碼轉換成高效的機器專用代碼)的引入,用Java實現中間層將變得越來越實用。這將是壹個很大的進步,它使人們能夠充分利用Java的許多優點(如健壯性、多線程和安全性)。JDBC對於從Java中間層訪問數據庫非常重要。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入門級(ANSI SQL-2代表美國國家標準局1992采用的標準)。入門級表示SQL函數的特定列表)。驅動程序開發人員可以使用JDBC API附帶的測試工具包來確定他們的驅動程序是否符合這些標準。“符合JDBC標準TM”意味著提供商的JDBC實現已經通過了JavaSoft提供的壹致性測試。這些壹致性測試將檢查JDBC API中定義的所有類和方法是否存在,如果可能,程序是否具有SQL入口級功能。當然,這些測試並不完整,JavaSoft目前也無意對各種提供者的實現進行評分。然而,這個壹致性定義確實為JDBC實現提供了壹些可信度。隨著越來越多的數據庫提供商、連接提供商、互聯網提供商和應用程序員接受JDBC API,JDBC正迅速成為Java數據庫訪問的標準。JDBC連接您需要做的第壹件事是與您想要使用的DBMS建立連接。這包括兩個步驟:加載驅動程序和建立連接。加載驅動程序加載驅動程序只需要壹行非常簡單的代碼。例如,如果您想使用JDBC-ODBC橋驅動程序,您可以加載以下代碼:class.forname ("sun。JDBC . odbc . JDBC odbc driver ");妳的驅動文檔會告訴妳應該使用的類名。例如,如果類名是jdbc。DriverXYZ,您將使用以下代碼加載驅動程序:Class.forName("jdbc。driver XYZ”);不需要創建驅動類的實例並向DriverManager註冊,因為調用Class.forName會自動加載驅動類。如果妳自己已經創建了壹個實例,妳會創建壹個不必要的副本,但這不會有什麽壞處。加載驅動程序類後,可以使用它們來建立與數據庫的連接。建立連接的第二步是用適當的驅動程序類建立與DBMS的連接。下面的代碼是壹個通用的做法:connection con = driver manager . get connection(URL," mylogin "," my password ");這壹步也很簡單,最難的是如何提供網址。如果您使用JDBC-ODBC橋,JDBC URL將以jdbc:odbc開頭:URL的其余部分通常是您的數據源名稱或數據庫系統。因此,假設您正在使用ODBC訪問壹個名為“Fred”的ODBC數據源,您的JDBC URL是jdbc:odbc:Fred。用您登錄DBMS的用戶名和密碼替換“myLogin”和“myPassword”。如果用用戶名“Fernanda”和密碼“J8”登錄數據庫系統,可以用下面兩行代碼建立連接:String URL = " JDBC:odbc:Fred ";connection con = driver manager . get connection(URL," Fernanda "," J8 ");如果您使用的是第三方開發的jdbc驅動程序,文檔會告訴您使用什麽子協議,這是JDBC URL中JDBC之後的部分。例如,如果驅動程序開發人員將acme註冊為子協議,那麽JDBC URL的第壹部分和第二部分將是jdbc:acme。驅動文檔還會告訴妳剩下的JDBC URL的格式。JDBC URL的最後壹部分提供了定位數據庫的信息。如果您加載的驅動程序識別提供給DriverManager.getConnection的JDBC URL,該驅動程序將根據JDBC URL建立到指定DBMS的連接。顧名思義,DriverManager類在幕後為您管理建立連接的所有細節。除非妳正在編寫壹個驅動程序,否則妳可能不需要在這個類中使用任何其他方法。普通程序員在這個類中唯壹需要直接使用的方法是DriverManager.getConnection,DriverManager.getConnection方法返回壹個打開的連接,妳可以用它來創建JDBC語句,並向數據庫發送SQL語句。