WEB應(yīng)用與開發(fā)_09JDBC與數(shù)據(jù)庫(原理、JDBC與數(shù)據(jù)庫的連接)_第1頁
WEB應(yīng)用與開發(fā)_09JDBC與數(shù)據(jù)庫(原理、JDBC與數(shù)據(jù)庫的連接)_第2頁
WEB應(yīng)用與開發(fā)_09JDBC與數(shù)據(jù)庫(原理、JDBC與數(shù)據(jù)庫的連接)_第3頁
WEB應(yīng)用與開發(fā)_09JDBC與數(shù)據(jù)庫(原理、JDBC與數(shù)據(jù)庫的連接)_第4頁
WEB應(yīng)用與開發(fā)_09JDBC與數(shù)據(jù)庫(原理、JDBC與數(shù)據(jù)庫的連接)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、課題課題JDBC與數(shù)據(jù)庫(原理、與數(shù)據(jù)庫(原理、JDBC與數(shù)據(jù)庫與數(shù)據(jù)庫的連接)的連接)目的要求目的要求 掌握掌握J(rèn)DBC的基本概念及的基本概念及JDBC類的的基類的的基本方法本方法 教學(xué)重點(diǎn)教學(xué)重點(diǎn) JDBC的概念、的概念、JDBC驅(qū)動程序的類型及驅(qū)動程序的類型及與數(shù)據(jù)庫的連接與數(shù)據(jù)庫的連接教學(xué)難點(diǎn)教學(xué)難點(diǎn) JDBC與不同數(shù)據(jù)庫的連接與處理與不同數(shù)據(jù)庫的連接與處理教學(xué)課時教學(xué)課時 4(含(含2課時上機(jī))課時上機(jī))教學(xué)方法教學(xué)方法 講解、示例與啟發(fā)式教學(xué)相結(jié)合講解、示例與啟發(fā)式教學(xué)相結(jié)合教學(xué)內(nèi)容和步驟教學(xué)內(nèi)容和步驟9.1 JDBC9.1 JDBC與數(shù)據(jù)庫與數(shù)據(jù)庫9.1.1 9.1.1 什么是什

2、么是 JDBCTMJDBCTM? JDBCTM JDBCTM 是一種用于執(zhí)行是一種用于執(zhí)行 SQL SQL 語句的語句的 JavaTM APIJavaTM API(有意思的是,(有意思的是,JDBC JDBC 本身是個商標(biāo)名而不是一個本身是個商標(biāo)名而不是一個縮寫字;然而,縮寫字;然而,JDBCJDBC常被認(rèn)為是代表常被認(rèn)為是代表 “ “Java Java 數(shù)據(jù)數(shù)據(jù)庫連接庫連接 (Java Database Connectivity)”(Java Database Connectivity)”)。它)。它由一組用由一組用 Java Java 編程語言編寫的類和接口組成。編程語言編寫的類和接口組成

3、。JDBC JDBC 為工具為工具/ /數(shù)據(jù)庫開發(fā)人員提供了一個標(biāo)準(zhǔn)的數(shù)據(jù)庫開發(fā)人員提供了一個標(biāo)準(zhǔn)的 APIAPI,使他們能夠用純,使他們能夠用純Java API Java API 來編寫數(shù)據(jù)庫應(yīng)用來編寫數(shù)據(jù)庫應(yīng)用程序。程序。有了有了 JDBC,向各種關(guān)系數(shù)據(jù)庫發(fā)送,向各種關(guān)系數(shù)據(jù)庫發(fā)送 SQL 語句就是一件很語句就是一件很容易的事。換言之,有了容易的事。換言之,有了JDBC API,就不必為訪問,就不必為訪問 Sybase 數(shù)據(jù)庫專門寫一個程序,為訪問數(shù)據(jù)庫專門寫一個程序,為訪問 Oracle 數(shù)據(jù)庫又?jǐn)?shù)據(jù)庫又專門寫一個程序,為訪問專門寫一個程序,為訪問Informix 數(shù)據(jù)庫又寫另一個程數(shù)

4、據(jù)庫又寫另一個程序,等等。您只需用序,等等。您只需用 JDBC API 寫一個程序就夠了,它可寫一個程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送向相應(yīng)數(shù)據(jù)庫發(fā)送 SQL 語句。而且,使用語句。而且,使用 Java 編程語言編程語言編寫的應(yīng)用程序,就無須去憂慮要為不同的平臺編寫不編寫的應(yīng)用程序,就無須去憂慮要為不同的平臺編寫不同的應(yīng)用程序。將同的應(yīng)用程序。將 Java 和和 JDBC 結(jié)合起來將使程序員只結(jié)合起來將使程序員只須寫一遍程序就可讓它在任何平臺上運(yùn)行。須寫一遍程序就可讓它在任何平臺上運(yùn)行。Java 具有堅固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自具有堅固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自動下

5、載等特性,是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要動下載等特性,是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要的只是的只是 Java 應(yīng)用程序與各種不同數(shù)據(jù)庫之間進(jìn)行對話的方法。應(yīng)用程序與各種不同數(shù)據(jù)庫之間進(jìn)行對話的方法。而而 JDBC 正是作為此種用途的機(jī)制。正是作為此種用途的機(jī)制。JDBC 擴(kuò)展了擴(kuò)展了 Java 的功能。例如,用的功能。例如,用 Java 和和 JDBC API 可以發(fā)布含有可以發(fā)布含有 applet的網(wǎng)頁,而該的網(wǎng)頁,而該 applet 使用的信息可能來自遠(yuǎn)程數(shù)據(jù)庫。企業(yè)使用的信息可能來自遠(yuǎn)程數(shù)據(jù)庫。企業(yè)也可以用也可以用 JDBC 通過通過Intranet 將所有職員連到一將所有

6、職員連到一個或多個內(nèi)部數(shù)據(jù)庫中(即使這些職員所用的個或多個內(nèi)部數(shù)據(jù)庫中(即使這些職員所用的計算機(jī)有計算機(jī)有 Windows、 Macintosh 和和 UNIX 等各種等各種不同的操作系統(tǒng))。隨著越來越多的程序員開不同的操作系統(tǒng))。隨著越來越多的程序員開始使用始使用 Java 編程語言,對從編程語言,對從 Java中便捷地訪問中便捷地訪問數(shù)據(jù)庫的要求也在日益增加。數(shù)據(jù)庫的要求也在日益增加。MIS 管理員們都喜歡管理員們都喜歡 Java 和和 JDBC 的結(jié)合,因為它使信息的結(jié)合,因為它使信息傳播變得容易和經(jīng)濟(jì)。企業(yè)可繼續(xù)使用它們安裝好的數(shù)據(jù)傳播變得容易和經(jīng)濟(jì)。企業(yè)可繼續(xù)使用它們安裝好的數(shù)據(jù)庫,

7、并能便捷地存取信息,即使這些信息是儲存在不同數(shù)庫,并能便捷地存取信息,即使這些信息是儲存在不同數(shù)據(jù)庫管理系統(tǒng)上。新程序的開發(fā)期很短。安裝和版本控制據(jù)庫管理系統(tǒng)上。新程序的開發(fā)期很短。安裝和版本控制將大為簡化。程序員可只編寫一遍應(yīng)用程序或只更新一次,將大為簡化。程序員可只編寫一遍應(yīng)用程序或只更新一次,然后將它放到服務(wù)器上,隨后任何人就都可得到最新版本然后將它放到服務(wù)器上,隨后任何人就都可得到最新版本的應(yīng)用程序。對于商務(wù)上的銷售信息服務(wù),的應(yīng)用程序。對于商務(wù)上的銷售信息服務(wù), Java 和和 JDBC 可為外部客戶提供獲取信息更新的更好方法??蔀橥獠靠蛻籼峁┇@取信息更新的更好方法。9.1.2 JD

8、BC 的用途是什么?的用途是什么?簡單地說,簡單地說,JDBC 可做三件事:可做三件事: 與數(shù)據(jù)庫建立連接,與數(shù)據(jù)庫建立連接, 發(fā)送發(fā)送 SQL 語句,語句, 處理結(jié)果。處理結(jié)果。下列代碼段給出了以上三步的基本示例:下列代碼段給出了以上三步的基本示例:Connection con = DriverManager.getConnection (jdbc:odbc:wombat, login, password);Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM T

9、able1);while (rs.next()System.out.println(rs.getString(a) + + rs.getString(b) + + rs.getString(c);9.1.3 JDBC API 簡介簡介JDBC 是個是個“低級低級”接口,也就是說,它用于直接口,也就是說,它用于直接調(diào)用接調(diào)用 SQL 命令。在這方面它的功能極佳,并比其它命令。在這方面它的功能極佳,并比其它的數(shù)據(jù)庫連接的數(shù)據(jù)庫連接 API 易于使用,但它同時也被設(shè)計為一種易于使用,但它同時也被設(shè)計為一種基礎(chǔ)接口,在它之上可以建立高級接口和工具?;A(chǔ)接口,在它之上可以建立高級接口和工具。高級接口是高

10、級接口是“對用戶友好的對用戶友好的”接口,它使用的是接口,它使用的是一種更易理解和更為方便的一種更易理解和更為方便的 API,這種,這種 API 在幕后被轉(zhuǎn)在幕后被轉(zhuǎn)換為諸如換為諸如 JDBC 這樣的低級接口。在編寫本文時,正在這樣的低級接口。在編寫本文時,正在開發(fā)兩種基于開發(fā)兩種基于 JDBC 的高級的高級 API:一種用于一種用于 Java 的嵌入式的嵌入式 SQL。至少已經(jīng)有一個提供者計劃。至少已經(jīng)有一個提供者計劃編寫它。編寫它。DBMS 實現(xiàn)實現(xiàn)SQL:一種專門設(shè)計來與數(shù)據(jù)庫聯(lián)合使:一種專門設(shè)計來與數(shù)據(jù)庫聯(lián)合使用的語言。用的語言。JDBC 要求要求 SQL 語句必須作為語句必須作為 S

11、tring 傳給傳給 Java 方方法。相反,嵌入式法。相反,嵌入式 SQL預(yù)處理器允許程序員將預(yù)處理器允許程序員將 SQL 語句直接語句直接與與Java 混在一起使用。例如,可在混在一起使用。例如,可在 SQL 語句中使用語句中使用 Java 變變量,用以接受或提供量,用以接受或提供SQL 值。然后,嵌入式值。然后,嵌入式 SQL 預(yù)處理器將預(yù)處理器將通過通過 JDBC 調(diào)用把這種調(diào)用把這種 Java/SQL 的混合物轉(zhuǎn)換為的混合物轉(zhuǎn)換為Java。關(guān)系。關(guān)系數(shù)據(jù)庫表到數(shù)據(jù)庫表到 Java 類的直接映射。類的直接映射。JavaSoft 和其它提供者都聲和其它提供者都聲稱要實現(xiàn)該稱要實現(xiàn)該API

12、。在這種。在這種“對象對象/關(guān)系關(guān)系”映射中,表中的每行映射中,表中的每行對應(yīng)于類的一個實例,而每列的值對應(yīng)于該實例的一個屬對應(yīng)于類的一個實例,而每列的值對應(yīng)于該實例的一個屬性。于是,程序員可直接對性。于是,程序員可直接對 Java 對象進(jìn)行操作;存取數(shù)據(jù)對象進(jìn)行操作;存取數(shù)據(jù)所需的所需的 SQL 調(diào)用將在調(diào)用將在“掩蓋下掩蓋下”自動生成。此外還可提供自動生成。此外還可提供更復(fù)雜的映射,例如將多個表中的行結(jié)合進(jìn)一個更復(fù)雜的映射,例如將多個表中的行結(jié)合進(jìn)一個 Java 類中。類中。隨著人們對隨著人們對 JDBC 的興趣日益增漲,越來越多的開發(fā)的興趣日益增漲,越來越多的開發(fā)人員一直在使用基于人員一

13、直在使用基于 JDBC 的工具,以使程序的編寫更的工具,以使程序的編寫更加容易。程序員也一直在編寫力圖使最終用戶對數(shù)據(jù)庫加容易。程序員也一直在編寫力圖使最終用戶對數(shù)據(jù)庫的訪問變得更為簡單的應(yīng)用程序。例如,應(yīng)用程序可提的訪問變得更為簡單的應(yīng)用程序。例如,應(yīng)用程序可提供一個選擇數(shù)據(jù)庫任務(wù)的菜單。任務(wù)被選定后,應(yīng)用程供一個選擇數(shù)據(jù)庫任務(wù)的菜單。任務(wù)被選定后,應(yīng)用程序?qū)⒔o出提示及空白供填寫執(zhí)行選定任務(wù)所需的信息。序?qū)⒔o出提示及空白供填寫執(zhí)行選定任務(wù)所需的信息。所需信息輸入后,應(yīng)用程序?qū)⒆詣诱{(diào)用所需的所需信息輸入后,應(yīng)用程序?qū)⒆詣诱{(diào)用所需的SQL 命令。命令。在這樣一種程序的協(xié)助下,即使用戶根本不懂在這

14、樣一種程序的協(xié)助下,即使用戶根本不懂 SQL 的語的語法,也可以執(zhí)行數(shù)據(jù)庫任務(wù)。法,也可以執(zhí)行數(shù)據(jù)庫任務(wù)。 JDBC 與與 ODBC 和其它和其它 API 的比較的比較目前,目前,Microsoft 的的 ODBC(開放式數(shù)據(jù)庫連接)(開放式數(shù)據(jù)庫連接)API 可可能是使用最廣的、用于訪問關(guān)系數(shù)據(jù)庫的編程接口。它能在幾能是使用最廣的、用于訪問關(guān)系數(shù)據(jù)庫的編程接口。它能在幾乎所有平臺上連接幾乎所有的數(shù)據(jù)庫。為什么乎所有平臺上連接幾乎所有的數(shù)據(jù)庫。為什么Java 不使用不使用 ODBC?對這個問題的回答是:對這個問題的回答是:Java 可以使用可以使用 ODBC,但最好是,但最好是在在 JDBC

15、的幫助下以的幫助下以JDBC-ODBC 橋的形式使用,這一點(diǎn)我們稍橋的形式使用,這一點(diǎn)我們稍后再說?,F(xiàn)在的問題已變成:后再說。現(xiàn)在的問題已變成:“為什么需要為什么需要 JDBC”? 回答如下:回答如下:ODBC 不適合直接在不適合直接在 Java 中使用,因為它使用中使用,因為它使用 C 語言接口。從語言接口。從 Java 調(diào)用本地調(diào)用本地 C 代碼在安全性、實現(xiàn)、堅固性和程序的自動移代碼在安全性、實現(xiàn)、堅固性和程序的自動移植性方面都有許多缺點(diǎn)。植性方面都有許多缺點(diǎn)。從從 ODBC API 到到 Java API 的字面翻譯是不可取的。例如,的字面翻譯是不可取的。例如,Java 沒有指針,而沒

16、有指針,而 ODBC 卻對指針用得很廣泛(包括卻對指針用得很廣泛(包括很容易出錯的指針很容易出錯的指針 void *)。您可以將)。您可以將 JDBC 想象成想象成被轉(zhuǎn)換為面向?qū)ο蠼涌诘谋晦D(zhuǎn)換為面向?qū)ο蠼涌诘?ODBC,而面向?qū)ο蟮慕涌趯?,而面向?qū)ο蟮慕涌趯?Java 程序員來說較易于接收。程序員來說較易于接收。ODBC 很難學(xué)。它把簡單很難學(xué)。它把簡單和高級功能混在一起,而且即使對于簡單的查詢,其和高級功能混在一起,而且即使對于簡單的查詢,其選項也極為復(fù)雜。相反,選項也極為復(fù)雜。相反,JDBC 盡量保證簡單功能的簡盡量保證簡單功能的簡便性,而同時在必要時允許使用高級功能。啟用便性,而同時在必

17、要時允許使用高級功能。啟用“純純 Java ”機(jī)制需要象機(jī)制需要象 JDBC 這樣的這樣的 Java API。如果使用。如果使用 ODBC,就必須手動地將,就必須手動地將 ODBC 驅(qū)動程序管理器和驅(qū)動驅(qū)動程序管理器和驅(qū)動程序安裝在每臺客戶機(jī)上。如果完全用程序安裝在每臺客戶機(jī)上。如果完全用 Java 編寫編寫 JDBC 驅(qū)動程序則驅(qū)動程序則 JDBC 代碼在所有代碼在所有 Java 平臺上(從網(wǎng)絡(luò)計算平臺上(從網(wǎng)絡(luò)計算機(jī)到大型機(jī))都可以自動安裝、移植并保證安全性。機(jī)到大型機(jī))都可以自動安裝、移植并保證安全性。總之,總之,JDBC API 對于基本的對于基本的 SQL 抽象和概念是一種自抽象和概

18、念是一種自然的然的 Java 接口。它建立在接口。它建立在 ODBC 上而不是從零開始。上而不是從零開始。因此,熟悉因此,熟悉ODBC 的程序員將發(fā)現(xiàn)的程序員將發(fā)現(xiàn) JDBC 很容易使用。很容易使用。JDBC 保留了保留了 ODBC 的基本設(shè)計特征;事實上,兩種接的基本設(shè)計特征;事實上,兩種接口都基于口都基于 X/Open SQL CLI(調(diào)用級接口)。它們之間(調(diào)用級接口)。它們之間最大的區(qū)別在于:最大的區(qū)別在于:JDBC 以以 Java 風(fēng)格與優(yōu)點(diǎn)為基礎(chǔ)并風(fēng)格與優(yōu)點(diǎn)為基礎(chǔ)并進(jìn)行優(yōu)化,因此更加易于使用進(jìn)行優(yōu)化,因此更加易于使用。最近,最近,Microsoft 又引進(jìn)了又引進(jìn)了 ODBC 之外

19、的新之外的新 API: RDO、 ADO 和和 OLE DB。這些設(shè)計在許多方面與。這些設(shè)計在許多方面與 JDBC 是相同的,是相同的,即它們都是面向?qū)ο蟮臄?shù)據(jù)庫接口且基于可在即它們都是面向?qū)ο蟮臄?shù)據(jù)庫接口且基于可在ODBC 上上實現(xiàn)的類。但在這些接口中,我們未看見有特別的功能實現(xiàn)的類。但在這些接口中,我們未看見有特別的功能使我們要轉(zhuǎn)而選擇它們來替代使我們要轉(zhuǎn)而選擇它們來替代 ODBC,尤其是在,尤其是在 ODBC 驅(qū)驅(qū)動程序已建立起較為完善的市場的情況下。它們最多也動程序已建立起較為完善的市場的情況下。它們最多也就是在就是在 ODBC 上加了一種裝飾而已。這并不是說上加了一種裝飾而已。這并不

20、是說 JDBC 不不需要從其最初的版本再發(fā)展了;然而,我們覺得大部份需要從其最初的版本再發(fā)展了;然而,我們覺得大部份的新功能應(yīng)歸入諸如前一節(jié)中所述的對象的新功能應(yīng)歸入諸如前一節(jié)中所述的對象/關(guān)系映射和嵌關(guān)系映射和嵌入式入式 SQL 這樣的高級這樣的高級 API。 兩層模型和三層模型兩層模型和三層模型JDBC API 既支持?jǐn)?shù)據(jù)庫訪問的兩層模型,同時既支持?jǐn)?shù)據(jù)庫訪問的兩層模型,同時也支持三層模型。也支持三層模型。在兩層模型中,在兩層模型中,Java applet 或應(yīng)用程序?qū)⒅苯优c數(shù)或應(yīng)用程序?qū)⒅苯优c數(shù)據(jù)庫進(jìn)行對話。這將需要一個據(jù)庫進(jìn)行對話。這將需要一個 JDBC 驅(qū)動程序來與所驅(qū)動程序來與所訪

21、問的特定數(shù)據(jù)庫管理系統(tǒng)進(jìn)行通訊。用戶的訪問的特定數(shù)據(jù)庫管理系統(tǒng)進(jìn)行通訊。用戶的 SQL 語語句被送往數(shù)據(jù)庫中,而其結(jié)果將被送回給用戶。數(shù)據(jù)句被送往數(shù)據(jù)庫中,而其結(jié)果將被送回給用戶。數(shù)據(jù)庫可以位于另一臺計算機(jī)上,用戶通過網(wǎng)絡(luò)連接到上庫可以位于另一臺計算機(jī)上,用戶通過網(wǎng)絡(luò)連接到上面。這就叫做客戶機(jī)面。這就叫做客戶機(jī)/服務(wù)器配置,其中用戶的計算服務(wù)器配置,其中用戶的計算機(jī)為客戶機(jī),提供數(shù)據(jù)庫的計算機(jī)為服務(wù)器。網(wǎng)絡(luò)可機(jī)為客戶機(jī),提供數(shù)據(jù)庫的計算機(jī)為服務(wù)器。網(wǎng)絡(luò)可以是以是 Intranet(它可將公司職員連接起來),也可以(它可將公司職員連接起來),也可以是是 Internet。在三層模型中,命令先是被

22、發(fā)送到服務(wù)的在三層模型中,命令先是被發(fā)送到服務(wù)的“中間層中間層”,然,然后由它將后由它將 SQL 語句發(fā)送給數(shù)據(jù)庫。數(shù)據(jù)庫對語句發(fā)送給數(shù)據(jù)庫。數(shù)據(jù)庫對 SQL 語句進(jìn)語句進(jìn)行處理并將結(jié)果送回到中間層,中間層再將結(jié)果送回給用行處理并將結(jié)果送回到中間層,中間層再將結(jié)果送回給用戶。戶。MIS 主管們都發(fā)現(xiàn)三層模型很吸引人,因為可用中間主管們都發(fā)現(xiàn)三層模型很吸引人,因為可用中間層來控制對公司數(shù)據(jù)的訪問和可作的的更新的種類。中間層來控制對公司數(shù)據(jù)的訪問和可作的的更新的種類。中間層的另一個好處是,用戶可以利用易于使用的高級層的另一個好處是,用戶可以利用易于使用的高級API,而中間層將把它轉(zhuǎn)換為相應(yīng)的低級調(diào)

23、用。最后,許多情況而中間層將把它轉(zhuǎn)換為相應(yīng)的低級調(diào)用。最后,許多情況下三層結(jié)構(gòu)可提供一些性能上的好處。下三層結(jié)構(gòu)可提供一些性能上的好處。到目前為止,中間層通常都用到目前為止,中間層通常都用 C 或或 C+ 這類語言來這類語言來編寫,這些語言執(zhí)行速度較快。然而,隨著最優(yōu)化編編寫,這些語言執(zhí)行速度較快。然而,隨著最優(yōu)化編譯器(它把譯器(它把 Java字節(jié)代碼轉(zhuǎn)換為高效的特定于機(jī)器的字節(jié)代碼轉(zhuǎn)換為高效的特定于機(jī)器的代碼)的引入,用代碼)的引入,用 Java 來實現(xiàn)中間層將變得越來越實來實現(xiàn)中間層將變得越來越實際。這將是一個很大的進(jìn)步,它使人們可以充分利用際。這將是一個很大的進(jìn)步,它使人們可以充分利用

24、 Java 的諸多優(yōu)點(diǎn)(如堅固、多線程和安全等特征)。的諸多優(yōu)點(diǎn)(如堅固、多線程和安全等特征)。JDBC對于從對于從 Java 的中間層來訪問數(shù)據(jù)庫非常重要。的中間層來訪問數(shù)據(jù)庫非常重要。 SQL 的一致性的一致性結(jié)構(gòu)化查詢語言結(jié)構(gòu)化查詢語言 (SQL) 是訪問關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。是訪問關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。困難之處在于:雖然大多數(shù)的困難之處在于:雖然大多數(shù)的 DBMS (數(shù)據(jù)庫管理系統(tǒng))對(數(shù)據(jù)庫管理系統(tǒng))對其基本功能都使用了標(biāo)準(zhǔn)形式的其基本功能都使用了標(biāo)準(zhǔn)形式的 SQL,但它們卻不符合最近,但它們卻不符合最近為更高級的功能定義的標(biāo)準(zhǔn)為更高級的功能定義的標(biāo)準(zhǔn)SQL 語法或語義。例如,并非所

25、語法或語義。例如,并非所有的數(shù)據(jù)庫都支持儲存程序或外部連接,那些支持這一功能有的數(shù)據(jù)庫都支持儲存程序或外部連接,那些支持這一功能的數(shù)據(jù)庫又相互不一致。人們希望的數(shù)據(jù)庫又相互不一致。人們希望 SQL 中真正標(biāo)準(zhǔn)的那部份中真正標(biāo)準(zhǔn)的那部份能夠進(jìn)行擴(kuò)展以包括越來越多的功能。但同時能夠進(jìn)行擴(kuò)展以包括越來越多的功能。但同時 JDBC API 又必又必須支持現(xiàn)有的須支持現(xiàn)有的 SQL。JDBC API 解決這個問題的一種方法是允許將任何查詢解決這個問題的一種方法是允許將任何查詢字符串一直傳到所涉及的字符串一直傳到所涉及的DBMS 驅(qū)動程序上。這意味驅(qū)動程序上。這意味著應(yīng)用程序可以使用任意多的著應(yīng)用程序可以

26、使用任意多的 SQL 功能,但它必須冒功能,但它必須冒這樣的風(fēng)險:有可能在某些這樣的風(fēng)險:有可能在某些 DBMS 上出錯。事實上,上出錯。事實上,應(yīng)用程序查詢甚至不一定要是應(yīng)用程序查詢甚至不一定要是SQL,或者說它可以是,或者說它可以是個為特定的個為特定的 DBMS 設(shè)計的設(shè)計的 SQL 的專用派生物(例如,的專用派生物(例如,文檔或圖象查)。文檔或圖象查)。JDBC 處理處理 SQL 一致性問題的第二種方法是提供一致性問題的第二種方法是提供 ODBC 風(fēng)格的轉(zhuǎn)義子句。風(fēng)格的轉(zhuǎn)義子句。轉(zhuǎn)義語法為幾個常見的轉(zhuǎn)義語法為幾個常見的 SQL 分歧提供了一分歧提供了一種標(biāo)準(zhǔn)的種標(biāo)準(zhǔn)的 JDBC 語法。例

27、如,對日期文字和已儲存語法。例如,對日期文字和已儲存過程的調(diào)用都有轉(zhuǎn)義語法。過程的調(diào)用都有轉(zhuǎn)義語法。對于復(fù)雜的應(yīng)用程序,對于復(fù)雜的應(yīng)用程序,JDBC 用第三種方法用第三種方法來處理來處理 SQL 的一致性問題。它利用的一致性問題。它利用DatabaseMetaData 接口來提供關(guān)于接口來提供關(guān)于 DBMS 的描述的描述性信息,從而使應(yīng)用程序能適應(yīng)每個性信息,從而使應(yīng)用程序能適應(yīng)每個 DBMS 的要的要求和功能。求和功能。由于由于 JDBC API 將用作開發(fā)高級數(shù)據(jù)庫訪問工具和將用作開發(fā)高級數(shù)據(jù)庫訪問工具和 API 的基礎(chǔ)的基礎(chǔ) API,因此它還必須注意其所有上層建,因此它還必須注意其所有上

28、層建筑的一致性。筑的一致性。“符合符合JDBC 標(biāo)準(zhǔn)標(biāo)準(zhǔn)TM 代表用戶可依代表用戶可依賴的賴的 JDBC 功能的標(biāo)準(zhǔn)級別。要使用這一說明,驅(qū)功能的標(biāo)準(zhǔn)級別。要使用這一說明,驅(qū)動程序至少必須支持動程序至少必須支持 ANSI SQL-2 EntryLevel(ANSI SQL-2 代表美國國家標(biāo)準(zhǔn)局代表美國國家標(biāo)準(zhǔn)局 1992 年所采用的標(biāo)準(zhǔn)。年所采用的標(biāo)準(zhǔn)。Entry Level 代表代表SQL 功能的特定清單)。驅(qū)動程序功能的特定清單)。驅(qū)動程序開發(fā)人員可用開發(fā)人員可用 JDBC API 所帶的測試工具包來確定所帶的測試工具包來確定他們的驅(qū)動程序是否符合這些標(biāo)準(zhǔn)。他們的驅(qū)動程序是否符合這些標(biāo)準(zhǔn)

29、?!胺戏?JDBC 標(biāo)準(zhǔn)標(biāo)準(zhǔn)TM” 表示提供者的表示提供者的 JDBC 實現(xiàn)已經(jīng)通過了實現(xiàn)已經(jīng)通過了 JavaSoft 提供的一致性測試。這些一致性測試將檢查提供的一致性測試。這些一致性測試將檢查 JDBCAPI 中定義的所有類和方法是否都存在,并盡可能地檢查程序是中定義的所有類和方法是否都存在,并盡可能地檢查程序是否具有否具有 SQL Entry Level 功能。當(dāng)然,這些測試并不完全,而功能。當(dāng)然,這些測試并不完全,而且且 JavaSoft 目前也無意對各提供者的實現(xiàn)進(jìn)行標(biāo)級。但這種目前也無意對各提供者的實現(xiàn)進(jìn)行標(biāo)級。但這種一致性定義的確可對一致性定義的確可對JDBC 實現(xiàn)提供一定的

30、可信度。隨著越來實現(xiàn)提供一定的可信度。隨著越來越多的數(shù)據(jù)庫提供者、連接提供者、越多的數(shù)據(jù)庫提供者、連接提供者、Internet 提供者和應(yīng)用程提供者和應(yīng)用程序編程員對序編程員對 JDBC API 的接受,的接受,JDBC 也正迅速成為也正迅速成為 Java數(shù)據(jù)庫數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)。訪問的標(biāo)準(zhǔn)。9.1.4 JDBC 產(chǎn)品產(chǎn)品在編寫本文時,有幾個基于在編寫本文時,有幾個基于 JDBC 的產(chǎn)品已開的產(chǎn)品已開發(fā)完畢或正在開發(fā)中。當(dāng)然,本節(jié)中的信息將很快發(fā)完畢或正在開發(fā)中。當(dāng)然,本節(jié)中的信息將很快成為過時信息。因此,有關(guān)最新的信息,請查閱成為過時信息。因此,有關(guān)最新的信息,請查閱 JDBC 的網(wǎng)站,可通過

31、從以下的網(wǎng)站,可通過從以下 URL 開始瀏覽找到:開始瀏覽找到:http:/ 提供三種提供三種 JDBC 產(chǎn)品組件,它們是產(chǎn)品組件,它們是 Java 開發(fā)工具包開發(fā)工具包 (JDK) 的組成部份:的組成部份: JDBC 驅(qū)動程序管理器驅(qū)動程序管理器JDBC 驅(qū)動程序管理器是驅(qū)動程序管理器是 JDBC 體系結(jié)構(gòu)的支體系結(jié)構(gòu)的支柱。它實際上很小,也很簡單;其主要作用是柱。它實際上很小,也很簡單;其主要作用是把把 Java 應(yīng)用程序連接到正確的應(yīng)用程序連接到正確的JDBC 驅(qū)動程序上,驅(qū)動程序上,然后即退出。然后即退出。 JDBC 驅(qū)動程序測試工具包驅(qū)動程序測試工具包JDBC 驅(qū)動程序測試工具包為使

32、驅(qū)動程序測試工具包為使 JDBC 驅(qū)動程序運(yùn)行您的驅(qū)動程序運(yùn)行您的程序提供一定的可信度。只有通過程序提供一定的可信度。只有通過 JDBC 驅(qū)動程序測試驅(qū)動程序測試包的驅(qū)動程序才被認(rèn)為是符合包的驅(qū)動程序才被認(rèn)為是符合 JDBC 標(biāo)準(zhǔn)標(biāo)準(zhǔn)TM 的。的。 JDBC-ODBC 橋。橋。JDBC-ODBC 橋使橋使 ODBC 驅(qū)動程序可被用作驅(qū)動程序可被用作 JDBC 驅(qū)驅(qū)動程序。它的實現(xiàn)為動程序。它的實現(xiàn)為 JDBC 的快速發(fā)展提供了一條途徑,的快速發(fā)展提供了一條途徑,其長遠(yuǎn)目標(biāo)提供一種訪問某些不常見的其長遠(yuǎn)目標(biāo)提供一種訪問某些不常見的 DBMS(如果對(如果對這些不常見的這些不常見的 DBMS 未實

33、現(xiàn)未實現(xiàn) JDBC) 的方法。的方法。9.1.5 JDBC 驅(qū)動程序的類型驅(qū)動程序的類型我們目前所知曉的我們目前所知曉的 JDBC 驅(qū)動程序可驅(qū)動程序可分為以下四個種類:分為以下四個種類:JDBC-ODBC 橋加橋加 ODBC 驅(qū)動程序:驅(qū)動程序:JavaSoft 橋產(chǎn)品利用橋產(chǎn)品利用 ODBC 驅(qū)動程序提供驅(qū)動程序提供 JDBC 訪問。注意,必須將訪問。注意,必須將 ODBC 二進(jìn)制代碼二進(jìn)制代碼(許多情況下還包括數(shù)據(jù)庫客戶機(jī)代碼)加(許多情況下還包括數(shù)據(jù)庫客戶機(jī)代碼)加載到使用該驅(qū)動程序的每個客戶機(jī)上。因此,載到使用該驅(qū)動程序的每個客戶機(jī)上。因此,這種類型的驅(qū)動程序最適合于企業(yè)網(wǎng)(這種這種

34、類型的驅(qū)動程序最適合于企業(yè)網(wǎng)(這種網(wǎng)絡(luò)上客戶機(jī)的安裝不是主要問題),或者網(wǎng)絡(luò)上客戶機(jī)的安裝不是主要問題),或者是用是用 Java 編寫的三層結(jié)構(gòu)的應(yīng)用程序服務(wù)編寫的三層結(jié)構(gòu)的應(yīng)用程序服務(wù)器代碼。器代碼。本地本地 API - 部份用部份用 Java 來編寫的驅(qū)動來編寫的驅(qū)動程序:程序: 這種類型的驅(qū)動程序把客戶機(jī)這種類型的驅(qū)動程序把客戶機(jī) API 上的上的 JDBC 調(diào)用轉(zhuǎn)換為調(diào)用轉(zhuǎn)換為 Oracle、Sybase、Informix、DB2 或其它或其它 DBMS 的的調(diào)用。注意,象橋驅(qū)動程序一樣,這種調(diào)用。注意,象橋驅(qū)動程序一樣,這種類型的驅(qū)動程序要求將某些二進(jìn)制代碼類型的驅(qū)動程序要求將某些二

35、進(jìn)制代碼加載到每臺客戶。加載到每臺客戶。JDBC 網(wǎng)絡(luò)純網(wǎng)絡(luò)純 Java 驅(qū)動程序:這種驅(qū)動程序?qū)Ⅱ?qū)動程序:這種驅(qū)動程序?qū)?JDBC 轉(zhuǎn)換為與轉(zhuǎn)換為與 DBMS 無關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某無關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個服務(wù)器轉(zhuǎn)換為一種個服務(wù)器轉(zhuǎn)換為一種 DBMS 協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間件能夠?qū)⑺募兗軌驅(qū)⑺募?Java 客戶機(jī)連接到多種不同的數(shù)據(jù)庫上??蛻魴C(jī)連接到多種不同的數(shù)據(jù)庫上。所用的具體協(xié)議取決于提供者。通常,這是最為靈活的所用的具體協(xié)議取決于提供者。通常,這是最為靈活的 JDBC 驅(qū)動程序。有可能所有這種解決方案的提供者都提驅(qū)動程序。有可能所

36、有這種解決方案的提供者都提供適合于供適合于 Intranet 用的產(chǎn)品。為了使這些產(chǎn)品也支持用的產(chǎn)品。為了使這些產(chǎn)品也支持 Internet 訪問,它們必須處理訪問,它們必須處理 Web 所提出的安全性、通所提出的安全性、通過防火墻的訪問等方面的額外要求。幾家提供者正將過防火墻的訪問等方面的額外要求。幾家提供者正將 JDBC 驅(qū)動程序加到他們現(xiàn)有的數(shù)據(jù)庫中間件產(chǎn)品中。驅(qū)動程序加到他們現(xiàn)有的數(shù)據(jù)庫中間件產(chǎn)品中。本地協(xié)議純本地協(xié)議純 Java 驅(qū)動程序:這種類型的驅(qū)動程序?qū)Ⅱ?qū)動程序:這種類型的驅(qū)動程序?qū)?JDBC 調(diào)用直接轉(zhuǎn)換為調(diào)用直接轉(zhuǎn)換為DBMS 所使用的網(wǎng)絡(luò)協(xié)議。這將允許所使用的網(wǎng)絡(luò)協(xié)議。這

37、將允許從客戶機(jī)機(jī)器上直接調(diào)用從客戶機(jī)機(jī)器上直接調(diào)用 DBMS 服務(wù)器,是服務(wù)器,是 Intranet 訪問訪問的一個很實用的解決方法。由于許多這樣的協(xié)議都是專用的一個很實用的解決方法。由于許多這樣的協(xié)議都是專用的,因此數(shù)據(jù)庫提供者自己將是主要來源,有幾家提供者的,因此數(shù)據(jù)庫提供者自己將是主要來源,有幾家提供者已在著手做這件事了。最后,我們預(yù)計第已在著手做這件事了。最后,我們預(yù)計第 3、4 類驅(qū)動程類驅(qū)動程序?qū)⒊蔀閺男驅(qū)⒊蔀閺?JDBC 訪問數(shù)據(jù)庫的首選方法。第訪問數(shù)據(jù)庫的首選方法。第1、2 類驅(qū)動類驅(qū)動程序在直接的純程序在直接的純 Java 驅(qū)動程序還沒有上市前將會作為過渡驅(qū)動程序還沒有上市前

38、將會作為過渡方案來使用。對第方案來使用。對第 1、2 類驅(qū)動程序可能會有一些變種,類驅(qū)動程序可能會有一些變種,這些變種要求有連接器,但通常這些是更加不可取的解決這些變種要求有連接器,但通常這些是更加不可取的解決方案。第方案。第 3、4 類驅(qū)動程序提供了類驅(qū)動程序提供了 Java 的所有優(yōu)點(diǎn),包括的所有優(yōu)點(diǎn),包括自動安裝(例如,通過使用自動安裝(例如,通過使用 JDBC 驅(qū)動程序的驅(qū)動程序的 applet applet來下載該驅(qū)動程序)。來下載該驅(qū)動程序)。9.2 JDBC常用類和方法常用類和方法9.2.1四種驅(qū)動程序概念四種驅(qū)動程序概念JDBC-ODBC Bridge 橋接器型的驅(qū)動程序,這類

39、驅(qū)動程序的特色是必須橋接器型的驅(qū)動程序,這類驅(qū)動程序的特色是必須在使用者端的計算機(jī)上事先安裝好在使用者端的計算機(jī)上事先安裝好ODBC驅(qū)動程序,驅(qū)動程序,然后通過然后通過JDBC-ODBC的調(diào)用方法,進(jìn)而通過的調(diào)用方法,進(jìn)而通過ODBC來來存取數(shù)據(jù)庫。存取數(shù)據(jù)庫。作為作為JDK1.1后的一部分,是后的一部分,是sun.jdbc.odbc包的一部分包的一部分 Application-JDBC-ODBC Bridge-JDBC-ODBC Library-ODBC Driver-Database 適用于快速的原型系統(tǒng),沒有提供適用于快速的原型系統(tǒng),沒有提供JDBC驅(qū)動的數(shù)據(jù)驅(qū)動的數(shù)據(jù)庫如庫如Acces

40、s JDBC-Native API Bridge 也是橋接器驅(qū)動程序之一,這類驅(qū)動程序也必須先在也是橋接器驅(qū)動程序之一,這類驅(qū)動程序也必須先在使用者計算機(jī)上先安裝好特定的驅(qū)動程序(類似使用者計算機(jī)上先安裝好特定的驅(qū)動程序(類似ODBC),然后通過),然后通過JDBC-Native API橋接器的轉(zhuǎn)換,把橋接器的轉(zhuǎn)換,把Java API調(diào)用轉(zhuǎn)換成特定驅(qū)動程序的調(diào)用方法,進(jìn)而存調(diào)用轉(zhuǎn)換成特定驅(qū)動程序的調(diào)用方法,進(jìn)而存取數(shù)據(jù)庫。取數(shù)據(jù)庫。 利用開發(fā)商提供的本地庫來直接與數(shù)據(jù)庫通信。利用開發(fā)商提供的本地庫來直接與數(shù)據(jù)庫通信。 Application-JDBC Driver-Native Databas

41、e library-Database 比比A類性能略好。類性能略好。 JDBC-middleware 這類型的驅(qū)動程序最大的好處就是省去了在使用者計算機(jī)上這類型的驅(qū)動程序最大的好處就是省去了在使用者計算機(jī)上安裝任何驅(qū)動程序的麻煩,只需在服務(wù)器端安裝好安裝任何驅(qū)動程序的麻煩,只需在服務(wù)器端安裝好middleware,而,而middleware會負(fù)責(zé)所有存取數(shù)據(jù)庫必要的轉(zhuǎn)會負(fù)責(zé)所有存取數(shù)據(jù)庫必要的轉(zhuǎn)換。換。 Application-Jdbc Driver-java middleware-JDBC Driver-Database 具有最大的靈活性,通常由那些非數(shù)據(jù)庫廠商提供,是四種具有最大的靈活性,

42、通常由那些非數(shù)據(jù)庫廠商提供,是四種類型中最小的。類型中最小的。 Pure JDBC driver這類型的驅(qū)動程序是最成熟的這類型的驅(qū)動程序是最成熟的JDBC驅(qū)動程序,不但無需在使驅(qū)動程序,不但無需在使用者計算機(jī)上安裝任何額外的驅(qū)動程序,也不需要在服務(wù)器用者計算機(jī)上安裝任何額外的驅(qū)動程序,也不需要在服務(wù)器端安裝任何中介程序端安裝任何中介程序(middleware),所有存取數(shù)據(jù)庫的操作,所有存取數(shù)據(jù)庫的操作,都直接由驅(qū)動程序來完成。都直接由驅(qū)動程序來完成。 Application-Jdbc driver-database engine-database 最高的性能,通過自己的本地協(xié)議直接與數(shù)據(jù)庫

43、引最高的性能,通過自己的本地協(xié)議直接與數(shù)據(jù)庫引擎通信,具備在擎通信,具備在Internet裝配的能力。裝配的能力。9.2.2 常用的常用的JDBC類與方法類與方法 DriverManager類:類: 負(fù)責(zé)管理負(fù)責(zé)管理JDBC驅(qū)動程序。使用驅(qū)動程序。使用JDBC驅(qū)動程序之前,驅(qū)動程序之前,必須先將驅(qū)動程序加載并向必須先將驅(qū)動程序加載并向DriverManager注冊后注冊后才可以使用,同時提供方法來建立與數(shù)據(jù)庫的連才可以使用,同時提供方法來建立與數(shù)據(jù)庫的連接。接。 方法:方法: Class.forName(String driver); /加載注冊驅(qū)動程序加載注冊驅(qū)動程序 static Conn

44、ection getConnection(String url,String user,String password) throws SQLException; /取得對數(shù)據(jù)庫的連接取得對數(shù)據(jù)庫的連接 Static Driver getDriver(String url) throws SQLExcetion; /在已經(jīng)向在已經(jīng)向DriverManager注冊的驅(qū)動程序中尋找一個注冊的驅(qū)動程序中尋找一個能夠打開能夠打開url所指定的數(shù)據(jù)庫的驅(qū)動程序所指定的數(shù)據(jù)庫的驅(qū)動程序 Connection類類 負(fù)責(zé)維護(hù)負(fù)責(zé)維護(hù)JSP/JAVA數(shù)據(jù)庫程序和數(shù)據(jù)庫之間數(shù)據(jù)庫程序和數(shù)據(jù)庫之間的聯(lián)機(jī)??梢越⑷?/p>

45、個非常有用的類對象。的聯(lián)機(jī)??梢越⑷齻€非常有用的類對象。方法:方法: Statement createStatement() throws SQLException; /建立建立Statement類對象類對象 Statement createStatement(int resultSetType,int resultSetConcurrency) throws SQLException; / 建立建立Statement類對象類對象 resultSetType值值 TYPE_FORWARD_ONLY 結(jié)果集不可滾動結(jié)果集不可滾動 TYPE_SCROLL_INSENSITIVE 結(jié)果集可滾動,不

46、反映數(shù)據(jù)庫的結(jié)果集可滾動,不反映數(shù)據(jù)庫的變化變化 TYPE_SCROLL_SENSITIVE 結(jié)果集可滾動,反映數(shù)據(jù)庫的變結(jié)果集可滾動,反映數(shù)據(jù)庫的變化化 resultSetConcurrency值值 CONCUR_READ_ONLY 不能用結(jié)果集更新數(shù)據(jù)不能用結(jié)果集更新數(shù)據(jù) CONCUR_UPDATABLE 能用結(jié)果集更新數(shù)據(jù)能用結(jié)果集更新數(shù)據(jù) JDBC2.0中才支持滾動的結(jié)果集,而且可以對數(shù)據(jù)進(jìn)行更新中才支持滾動的結(jié)果集,而且可以對數(shù)據(jù)進(jìn)行更新 PreparedStatement prepareStatement(String sql) throws SQLException; /建立建立

47、PreparedStatement類對象類對象 boolean getAutoCommit() throws SQLException /返回返回Connection類對象的類對象的AutoCommit狀態(tài)狀態(tài) void setAutoCommit(boolean autoCommit) throws SQLException /設(shè)定設(shè)定Connection類對象的類對象的AutoCommit狀態(tài)狀態(tài) void commit() throws SQLException /確定執(zhí)行對數(shù)據(jù)確定執(zhí)行對數(shù)據(jù)庫新增、刪除或修改記錄的操作庫新增、刪除或修改記錄的操作 void rollback() thr

48、ows SQLException /取消執(zhí)行取消執(zhí)行對數(shù)據(jù)庫新增、刪除或修改記錄的操作對數(shù)據(jù)庫新增、刪除或修改記錄的操作 void close() throws SQLException /結(jié)束結(jié)束Connection對象對數(shù)據(jù)庫的聯(lián)機(jī)對象對數(shù)據(jù)庫的聯(lián)機(jī) boolean isClosed() throws SQLException /測試是測試是否已經(jīng)關(guān)閉否已經(jīng)關(guān)閉Connection類對象對數(shù)據(jù)庫的聯(lián)機(jī)類對象對數(shù)據(jù)庫的聯(lián)機(jī) Statement類類 通過通過Statement類所提供的方法,可以利用標(biāo)準(zhǔn)的類所提供的方法,可以利用標(biāo)準(zhǔn)的SQL命令,對數(shù)據(jù)庫直接新增、刪除或修改操作命令,對數(shù)據(jù)庫直

49、接新增、刪除或修改操作 方法:方法: ResultSet executeQuery(String sql) throws SQLException /使用使用SELECT命令對數(shù)據(jù)庫進(jìn)行查詢命令對數(shù)據(jù)庫進(jìn)行查詢 int executeUpdate(String sql) throws SQLException /使用使用INSERTDELETEUPDATE對數(shù)據(jù)庫進(jìn)行新增、刪除對數(shù)據(jù)庫進(jìn)行新增、刪除和修改操作。和修改操作。 void close() throws SQLException /結(jié)束結(jié)束Statement類對類對象對數(shù)據(jù)庫的聯(lián)機(jī)象對數(shù)據(jù)庫的聯(lián)機(jī) 例例1: access.jsp% t

50、ry String url=jdbc:odbc:product ; Connection conn; java.sql.Statement st; /java.sql.DatabaseMetaData dm;Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); conn=DriverManager.getConnection(url,); out.println(Join Success); st=conn.createStatement(); /dm=conn.getMetaData(); ResultSet rs=st.executeQuery(sele

51、ct * from Products); while (rs.next() out.println(rs.getString(name)+); catch (Exception ex ) ex.printStackTrace(); /out.println(dm.getDriverVersion()+); % PreparedStatement類類 PreparedStatement類和類和Statement類的不同之處在類的不同之處在于于PreparedStatement類對象會將傳入的類對象會將傳入的SQL命令事命令事先編好等待使用,當(dāng)有單一的先編好等待使用,當(dāng)有單一的SQL指令要多次執(zhí)行

52、指令要多次執(zhí)行時,用時,用PreparedStatement類會比類會比Statement類有效類有效率率方法:方法: ResultSet executeQuery() throws SQLException /使用使用SELECT命令對數(shù)據(jù)庫進(jìn)行查詢命令對數(shù)據(jù)庫進(jìn)行查詢 int executeUpdate() throws SQLException /使用使用INSERTDELETEUPDATE對數(shù)據(jù)庫進(jìn)對數(shù)據(jù)庫進(jìn)行新增、刪除和修改操作。行新增、刪除和修改操作。void setInt(int parameterIndex,int x) throws SQLException /設(shè)定整數(shù)類型數(shù)

53、值給設(shè)定整數(shù)類型數(shù)值給PreparedStatement類對類對象的象的IN參數(shù)參數(shù) void setFloat(int parameterIndex,float x) throws SQLException /設(shè)定浮點(diǎn)數(shù)類型數(shù)值給設(shè)定浮點(diǎn)數(shù)類型數(shù)值給PreparedStatement類類對象的對象的IN參數(shù)參數(shù)void setNull(int parameterIndex,int sqlType) throws SQLException /設(shè)定設(shè)定NULL類型數(shù)值給類型數(shù)值給PreparedStatement類對象的類對象的IN參數(shù)參數(shù) void setString(int paramete

54、rIndex,String x) throws SQLException /設(shè)定字符串類型數(shù)值給設(shè)定字符串類型數(shù)值給PreparedStatement類對象的類對象的IN參數(shù)參數(shù) void setDate(int parameterIndex,Date x) throws SQLException /設(shè)定日期類型數(shù)值給設(shè)定日期類型數(shù)值給PreparedStatement類對象的類對象的IN參參數(shù)數(shù) void setTime(int parameterIndex,Time x) throws SQLException /設(shè)定時間類型數(shù)值給設(shè)定時間類型數(shù)值給PreparedStatement類對象

55、的類對象的IN參數(shù)參數(shù) DatabaseMetaData類類 DatabaseMetadata類保存了數(shù)據(jù)庫的所有特性,并且類保存了數(shù)據(jù)庫的所有特性,并且提供許多方法來取得這些信息。提供許多方法來取得這些信息。 方法:方法: String getDatabaseProductName() throws SQLException /取得數(shù)據(jù)庫名稱取得數(shù)據(jù)庫名稱 String getDatabaseProductVersion() throws SQLException /取得數(shù)據(jù)庫版本代號取得數(shù)據(jù)庫版本代號 String getDriverName() throws SQLException /

56、取得取得JDBC驅(qū)動程序的名稱驅(qū)動程序的名稱 String getDriverVersion() throws SQLException /取得取得JDBC驅(qū)動程序的版本代號驅(qū)動程序的版本代號 String getURL() throws SQLException /取得連接數(shù)據(jù)庫的取得連接數(shù)據(jù)庫的JDBC URL String getUserName() throws SQLException /取得登錄數(shù)據(jù)庫的使用者帳號取得登錄數(shù)據(jù)庫的使用者帳號 ResultSet類類 負(fù)責(zé)存儲查詢數(shù)據(jù)庫的結(jié)果。并提供一系列的方法對數(shù)負(fù)責(zé)存儲查詢數(shù)據(jù)庫的結(jié)果。并提供一系列的方法對數(shù)據(jù)庫進(jìn)行新增、刪除和修改

57、操作。也負(fù)責(zé)維護(hù)一個記錄指據(jù)庫進(jìn)行新增、刪除和修改操作。也負(fù)責(zé)維護(hù)一個記錄指針(針(Cursor),記錄指針指向數(shù)據(jù)表中的某個記錄,通過),記錄指針指向數(shù)據(jù)表中的某個記錄,通過適當(dāng)?shù)囊苿佑涗浿羔?,可以隨心所欲的存取數(shù)據(jù)庫,加強(qiáng)適當(dāng)?shù)囊苿佑涗浿羔?,可以隨心所欲的存取數(shù)據(jù)庫,加強(qiáng)程序的效率。程序的效率。方法:方法: boolean absolute(int row) throws SQLException /移動記錄移動記錄指針到指定的記錄指針到指定的記錄void beforeFirst() throws SQLException /移動記錄指針到移動記錄指針到第一筆記錄之前第一筆記錄之前 voi

58、d afterLast() throws SQLException /移動記錄指針移動記錄指針到最后一筆記錄之后到最后一筆記錄之后 boolean first() throws SQLException /移動記錄指針移動記錄指針到第一筆記錄到第一筆記錄 boolean last() throws SQLException /移動記錄指針移動記錄指針到最后一筆記錄到最后一筆記錄boolean next() throws SQLException /移動記錄指針移動記錄指針到下一筆記錄到下一筆記錄 boolean previous() throws SQLException /移動記錄移動記錄指

59、針到上一筆記錄指針到上一筆記錄 void deleteRow() throws SQLException /刪除記錄指針刪除記錄指針指向的記錄指向的記錄 void moveToInsertRow() throws SQLException /移動記移動記錄指針以新增一筆記錄錄指針以新增一筆記錄 void moveToCurrentRow() throws SQLException /移動移動記錄指針到被記憶的記錄記錄指針到被記憶的記錄 void insertRow() throws SQLException /新增一筆記錄新增一筆記錄到數(shù)據(jù)庫中到數(shù)據(jù)庫中 void updateRow() th

60、rows SQLException /修改數(shù)據(jù)庫修改數(shù)據(jù)庫中的一筆記錄中的一筆記錄 void update類型類型(int columnIndex,類類型型 x) throws SQLException /修改指定字段的值修改指定字段的值 int get類型類型(int columnIndex) throws SQLException /取取得指定字段的值得指定字段的值 ResultSetMetaData getMetaData() throws SQLException /取得取得ResultSetMetaData類對象類對象 ResultSetMetaData類類 ResultSetMet

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論