JDBC和數(shù)據(jù)庫_第1頁
JDBC和數(shù)據(jù)庫_第2頁
JDBC和數(shù)據(jù)庫_第3頁
JDBC和數(shù)據(jù)庫_第4頁
JDBC和數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、JDBC和數(shù)據(jù)庫馮天宇JDBC簡介JDBC(Java DataBase Connectivity)是Java語言用來連接和操作關(guān)系型數(shù)據(jù)庫的應(yīng)用程序接口(API)。JDBC由一群類(Class)和接口(Interface)所組成,通過調(diào)用這些類和接口所提供的方法,我們可以連接不同的數(shù)據(jù)庫,對(duì)數(shù)據(jù)庫下達(dá)SQL命令并取得行結(jié)果。對(duì)程序開發(fā)人員來說,在Java程序中使用JDBC API來操作數(shù)據(jù)庫最大的好處是只要撰寫一次程序,然后搭建不同的JDBC驅(qū)動(dòng)程序,便可以操作不同的數(shù)據(jù)庫,而在JSP程序中使用JDBC的API來連接數(shù)據(jù)庫,更可以讓前端使用者無須事先安裝任何的程序,只需要通過瀏覽器便可以存取遠(yuǎn)

2、程數(shù)據(jù)庫。JDBC驅(qū)動(dòng)程序的分類目前有四種可供使用的JDBC驅(qū)動(dòng)程序,不同類型的的驅(qū)動(dòng)程序有著不一樣的使用方法,所以當(dāng)我們?cè)谶B接數(shù)據(jù)庫之前,必須先依照我們的需求選擇一個(gè)適當(dāng)?shù)尿?qū)動(dòng)程序,這四種不同類型的驅(qū)動(dòng)程序分別是:JDBC-ODBC Bridge,橋接器型的驅(qū)動(dòng)程序,這類驅(qū)動(dòng)程序的特色是必須在使用者端的計(jì)算機(jī)上事先安裝好ODBC驅(qū)動(dòng)程序,然后通過JDBC-ODBC的調(diào)用方法,進(jìn)而通過ODBC類存取數(shù)據(jù)庫。JDBC-Native API Bridge,也是橋接器型驅(qū)動(dòng)程序之一,如同類型一,這類型的驅(qū)動(dòng)程序也必須先在使用者計(jì)算機(jī)上安裝好特定的驅(qū)動(dòng)程序(類似ODBC),然后通過JDBC-Nativ

3、e API橋接器的轉(zhuǎn)換,把JAVA API調(diào)用轉(zhuǎn)換成特定驅(qū)動(dòng)程序的調(diào)用方法,進(jìn)而存取數(shù)據(jù)庫。JDBC-middleware,這類型的驅(qū)動(dòng)程序最大的好處是省去了在使用者計(jì)算機(jī)上安裝任何驅(qū)動(dòng)程序的麻煩,只需在服務(wù)器端安裝好middleware,而middleware會(huì)負(fù)責(zé)所有存取數(shù)據(jù)庫時(shí)必要的轉(zhuǎn)換。Pure JDBC driver,這類型的驅(qū)動(dòng)程序是最成熟的JDBC驅(qū)動(dòng)程序,不但無需在使用者計(jì)算機(jī)上安裝任何額外的驅(qū)動(dòng)程序,也不需在服務(wù)器端安裝任何的中介程序(middleware),所有存取數(shù)據(jù)庫的操作,都直接由驅(qū)動(dòng)程序來完成。一般而言,我們建議您不使用橋接器型的驅(qū)動(dòng)程序,這類型的驅(qū)動(dòng)程序不是用純J

4、AVA語言所開發(fā),這使得程序的可移植性會(huì)變差,而且還需要事先安裝其它的特定驅(qū)動(dòng)程序在使用者計(jì)算機(jī)上,非常的麻煩。反觀類型三和類型四的驅(qū)動(dòng)程序,不但使程序的可移植性提高,達(dá)到跨平臺(tái)的目的,還省去在使用者計(jì)算機(jī)上安裝其他驅(qū)動(dòng)程序的麻煩,可謂一舉數(shù)得。所以當(dāng)我們?cè)跒槲覀兊臄?shù)據(jù)庫選擇驅(qū)動(dòng)程序時(shí),應(yīng)盡量以類型三和類型四的JDBC驅(qū)動(dòng)程序?yàn)橹?,而類型一和二則為次要的選擇。JDBC驅(qū)動(dòng)程序存取架構(gòu)JDBC常用類與方法DriverManager類 這個(gè)類負(fù)責(zé)管理JDBC驅(qū)動(dòng)程序。我們使用JDBC驅(qū)動(dòng)程序之前,我們必須先將驅(qū)動(dòng)程序加載并向DriverManager注冊(cè)后才可使用,在程序中可以通過Class.fo

5、rName()這個(gè)標(biāo)準(zhǔn)函數(shù)來完成。 DriverManager類也提供方法讓我們建立與數(shù)據(jù)庫的連接。如下表所示:JDBC常用類與方法表 1下面的范例將示范如何連接數(shù)據(jù)庫新增記錄(Record)范例這個(gè)程序示范了如何連接到postgreSQL數(shù)據(jù)庫,先看這一行: 因?yàn)樵谖覀兊姆独杏玫搅薐DBC提供的類和方法,所以在程序的開頭一定要加上這一行,否則將發(fā)生編譯錯(cuò)誤。緊接著下面這一行: 只要我們希望在JSP網(wǎng)頁中存取數(shù)據(jù)庫中的中文,都必須在程序的開頭加上這一行,否則也將造成編譯上的錯(cuò)誤。接下來這一行: Class.forName(driver); 便是通過java.lang.Class類提供的標(biāo)準(zhǔn)方

6、法forName()來向DriverManager注冊(cè)并加載我們想要使用的JDBC驅(qū)動(dòng)程序,在這個(gè)范例中,我們使用的是postgreSQL的JDBC驅(qū)動(dòng)程序。 關(guān)于Class.forName(driver)方法中driver參數(shù)的設(shè)定,會(huì)因?yàn)椴煌腏DBC驅(qū)動(dòng)程序而有不同的設(shè)定,如何正確設(shè)定請(qǐng)參照各個(gè)驅(qū)動(dòng)程序的說明文件。當(dāng)我們通過Class.forName()方法正確的注冊(cè)并加載JDBC驅(qū)動(dòng)程序后,接下來就要建立和數(shù)據(jù)庫的連接。請(qǐng)看下面這一行: Connection con= DriverManager.getConnection(url,user,password); 我們利用java.sq

7、l.DriverManager類提供的getConnection()方法來建立與數(shù)據(jù)庫的連接,其中參數(shù)url指定了數(shù)據(jù)庫的位置,user指定連接數(shù)據(jù)庫時(shí)的使用者名稱,password指定連接數(shù)據(jù)庫時(shí)的密碼。關(guān)于url的指定方法,一般的格式如下: jdbc: 在我們的范例程序中我們指定的url如下: url=“jdbc:postgresql:test”; 其中在的部分我們指定postgreSQL為我們所要連接的數(shù)據(jù)庫類型,在的部分我們則指定了所要使用的數(shù)據(jù)庫名稱test。讓我們?cè)賮砜匆粋€(gè)url的例子: jdbc:odbc:mydata 這個(gè)例子顯示出我們通過jdbc:odbc bridge連接到

8、mydata數(shù)據(jù)庫。當(dāng)我們調(diào)用DriverManager.getConnection()方法之后,便會(huì)得到一個(gè)負(fù)責(zé)和數(shù)據(jù)庫連接的Connection類的對(duì)象,至此,我們便已順利的連接好數(shù)據(jù)庫。JDBC常用類與方法Connection類 Connection類對(duì)象負(fù)責(zé)維護(hù)JSP/Java數(shù)據(jù)庫程序和數(shù)據(jù)庫之間的聯(lián)機(jī)。通過Connection類提供的方法,我們可以建立另外三個(gè)非常有用的類對(duì)象,分別是Statement類、PreparedStatement類和Database Meta Data類,下面我們會(huì)分別針對(duì)這些類再做詳細(xì)的說明。表 2JDBC常用類與方法Statement類 通過State

9、ment類所提供的方法,我們可以利用標(biāo)準(zhǔn)的SQL命令,對(duì)數(shù)據(jù)庫直接進(jìn)行新增、刪除或修改記錄(Record)的操作。見表3。JDBC常用類與方法表 3現(xiàn)在讓我們通過范例程序來說明如何使用Statement類所提供的方法操作我們的數(shù)據(jù)庫。下面的范例程序?qū)est數(shù)據(jù)庫內(nèi)的phonebook數(shù)據(jù)表內(nèi)新增一筆記錄。 新增記錄(Record)范例 當(dāng)我們得到一個(gè)Connection類的對(duì)象之后,緊接著便利用Connection類所提供的方法createStatement()建立一個(gè)Statement類對(duì)象,接著我們來看這一行程序代碼: smt.executeUpdate(“INSERT intophon

10、ebook(name,phone,addr,birth)” +“ values(張小強(qiáng),12345678,西安市南窯頭,” +“TO_DATE(1980/02/30, YYYY/MM/DD)”); 我們將一個(gè)標(biāo)準(zhǔn)的SQL命令I(lǐng)NSERT語句當(dāng)成字符串參數(shù)傳給executeUpdate()方法,緊接著executeUpdate()方法便會(huì)通過由Connection類對(duì)象所維護(hù)的數(shù)據(jù)庫連接,實(shí)際將SQL命令傳給數(shù)據(jù)庫以進(jìn)行新增記錄的操作。Note:executeQuery()方法和executeUpdate()方法的使用方式是相當(dāng)類似的,它們都需要傳入一個(gè)標(biāo)準(zhǔn)的SQL命令作為參數(shù),主要的差別在于e

11、xecuteQuery()方法是專門處理查詢操作的。當(dāng)我們使用SQL命令SELECT語句對(duì)數(shù)據(jù)庫做查詢時(shí),就必須用executeQuery()方法,而executeQuery()方法會(huì)建立一個(gè)RecordSet類的對(duì)象保存查詢的結(jié)果,除了SELECT命令之外的其它SQL命令,如INSERT、DELETE、UPDATE、DROP等操作數(shù)據(jù)庫的語句,我們就可以通過executeUpdate()方法來執(zhí)行。JDBC常用類與方法PreparedStatement類 PreparedStatement類和Statement類的不同之處在于PreparedStatement類對(duì)象會(huì)將傳入的SQL命令事先編

12、好等待使用,所以當(dāng)我們有單一的SQL指令被執(zhí)行多次時(shí),用PreparedStatement類會(huì)比用Statement類來得有效率。如表3所示。表 3在下面這個(gè)程序中我們將示范如何使用PreparedStatement類對(duì)象來更新數(shù)據(jù)庫中的記錄。 修改記錄(Update)范例 首先,我們使用Connection類提供的preparedStatement()方法來建立PreparedStatement類對(duì)象,在這需要注意的是PreparedStatement類的“IN”參數(shù),也就是SQL命令中以“?”代替的部分,“IN”參數(shù)的類型必須和數(shù)據(jù)庫表格的字段(Field)類型一致,PreparedSta

13、tement類提供一系列的“set類型()”方法讓我們可以把java的數(shù)據(jù)類型轉(zhuǎn)換成適當(dāng)?shù)淖侄晤愋停詈笫褂胑xecuteUpdate()方法把我們的SQL命令傳給數(shù)據(jù)庫以完成修改記錄的操作。JDBC常用類與方法ResultSet類 當(dāng)我們使用SELECT命令來對(duì)數(shù)據(jù)庫做查詢時(shí),數(shù)據(jù)庫會(huì)響應(yīng)我們查詢的結(jié)果,而ResultSet類對(duì)象負(fù)責(zé)存儲(chǔ)我們查詢數(shù)據(jù)庫的結(jié)果。值得一提的是ResultSet類實(shí)際上作了一系列的方法讓我們即使不使用標(biāo)準(zhǔn)的SQL命令也能對(duì)數(shù)據(jù)庫進(jìn)行新增、刪除和修改記錄(Record)的操作。另外,ResultSet類對(duì)象也負(fù)責(zé)維護(hù)一個(gè)記錄指針(Cursor),記錄指針指向數(shù)據(jù)表格

14、(Table)中的某個(gè)記錄,通過適當(dāng)?shù)囊苿?dòng)記錄指針,我們可以隨心所欲的存取數(shù)據(jù)庫,進(jìn)而加強(qiáng)程序的效率。如表4。表4下面的程序?qū)⑹痉度绾问褂肦esultSet類 所提供的方法來移動(dòng)記錄指針并且讀取記錄指針?biāo)赶蛴涗浀淖侄?Field)值。 記錄指針(Cursor)范例 我們使用Statement類提供的方法executeQuery()查詢數(shù)據(jù)庫并將結(jié)果保存在ResultSet類對(duì)象中,請(qǐng)看這一行: ResultSet rst=smt.executeQuery(“SELECT * from phonebook”); executeQuery()方法將查詢phonebook數(shù)據(jù)表的結(jié)果保存在Resu

15、lt類對(duì)象中。我們?cè)诔绦蛑惺褂昧藥讉€(gè)移動(dòng)記錄指針的方法,分別是beforeFirst()、first()、last()、absolute()和next(),并且使用getstring()方法取得phonebook數(shù)據(jù)表內(nèi)記錄指針?biāo)赶蛴涗浀乃膫€(gè)字段值。JDBC常用類與方法DatabaseMetaData類 DatabaseMetaData類保存了數(shù)據(jù)庫的所有特性,并且提供許多的方法來取得這些信息,詳細(xì)的使用方法請(qǐng)參照J(rèn)DBC說明文件。JDBC常用類與方法表 5JDBC常用類與方法ResultSetMetaData類 ResultSetMetaData類對(duì)象保存了所有ResultSet類對(duì)象中關(guān)于字段(Field)的信息,并且也提供了許多方法來取得這些信息。如表6所示。JDBC常用類與方法表 6JDBC連接數(shù)據(jù)庫的模式與步驟加載驅(qū)動(dòng)程序 Class.forName(driver);建立連接 Connection co

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論