JDBC數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第1頁(yè)
JDBC數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第2頁(yè)
JDBC數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第3頁(yè)
JDBC數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第4頁(yè)
JDBC數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JDBC數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)

JDBC概述JDBC結(jié)構(gòu)使用JDBC訪問(wèn)數(shù)據(jù)庫(kù)的基本步驟JDBC類與接口JDBC的數(shù)據(jù)類型處理SQL例外一個(gè)連接數(shù)據(jù)庫(kù)的例子JDBC概述什么是JDBCJDBC(JavaDatabaseConnectivity),就是一個(gè)數(shù)據(jù)庫(kù)連接JavaAPI,屬于JavaAPI的一部分。JDBC為Java開發(fā)人員提供了一個(gè)行業(yè)標(biāo)準(zhǔn)API,它可以在Java應(yīng)用(applet、servlet、jsp、EJB等等)同大量關(guān)系數(shù)據(jù)庫(kù)之間建立起獨(dú)立于數(shù)據(jù)庫(kù)的連接,如Oracle、Informix、SQLServer和Sybase等關(guān)系數(shù)據(jù)庫(kù)。API提供了數(shù)據(jù)庫(kù)調(diào)用層接口。

JDBC概述JDBC的功能連接到數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句,查詢數(shù)據(jù)庫(kù)產(chǎn)生查詢結(jié)果執(zhí)行更新、插入和刪除動(dòng)作執(zhí)行存儲(chǔ)過(guò)程JDBC概述使用JDBC的好處開發(fā)人員只需要了解一組API,就可以訪問(wèn)任何關(guān)系數(shù)據(jù)庫(kù)。不必為不同的數(shù)據(jù)庫(kù)重新編寫代碼。不必了解數(shù)據(jù)庫(kù)供應(yīng)商的特定API。提供了標(biāo)準(zhǔn)API,而且獨(dú)立于供應(yīng)商。幾乎每個(gè)數(shù)據(jù)庫(kù)供應(yīng)商都具有幾種JDBC驅(qū)動(dòng)。JDBC是標(biāo)準(zhǔn)Java2平臺(tái)的一部分。JDBC結(jié)構(gòu)JDBC由兩部分組成JDBCAPI,一個(gè)純粹的基于Java的API,它支持Java應(yīng)用到JDBC驅(qū)動(dòng)管理器的通信。JDBC驅(qū)動(dòng)管理器,它負(fù)責(zé)與某些數(shù)據(jù)庫(kù)驅(qū)動(dòng)進(jìn)行通信,某些數(shù)據(jù)庫(kù)驅(qū)動(dòng)負(fù)責(zé)與具體的數(shù)據(jù)庫(kù)進(jìn)行通信。JDBC結(jié)構(gòu)JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)Java和JDBC提供了訪問(wèn)SQLDBMS數(shù)據(jù)庫(kù)的映射,所以JDBC驅(qū)動(dòng)可以應(yīng)用于大多數(shù)主流數(shù)據(jù)庫(kù)。JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)具有四種類型:JDBC-ODBC橋驅(qū)動(dòng)、部分Java驅(qū)動(dòng)、中間件驅(qū)動(dòng)和純Java驅(qū)動(dòng)。JDBC結(jié)構(gòu)JDBC-ODBC橋驅(qū)動(dòng)這是最基本的驅(qū)動(dòng),在這里JDBC連接到ODBC,ODBC再連接到數(shù)據(jù)庫(kù)。JDBC-ODBC橋把Java程序中的JDBC方法轉(zhuǎn)換成ODBC的功能。RDBMSJDBC-ODBC橋驅(qū)動(dòng)ODBC驅(qū)動(dòng)客戶端JDBC結(jié)構(gòu)部分Java驅(qū)動(dòng)在這種類型的數(shù)據(jù)庫(kù)驅(qū)動(dòng)中,JDBC連接到數(shù)據(jù)庫(kù)中。只有具備訪問(wèn)計(jì)算機(jī)完全安全性的Java程序才能使用這種類型的驅(qū)動(dòng)(applet不能用)。RDBMS部分Java驅(qū)動(dòng)私有API一些JDBC調(diào)用客戶端JDBC結(jié)構(gòu)中間件驅(qū)動(dòng)在這種驅(qū)動(dòng)中,JDBC連接到中間件,然后中間件連接到數(shù)據(jù)庫(kù)上。RDBMS中間件驅(qū)動(dòng)客戶端中間件驅(qū)動(dòng)服務(wù)器客戶端Network網(wǎng)絡(luò)協(xié)議JDBC結(jié)構(gòu)純Java驅(qū)動(dòng)這種類型驅(qū)動(dòng)直接把JDBC調(diào)用轉(zhuǎn)化為DBMS使用的網(wǎng)絡(luò)協(xié)議,允許從客戶機(jī)上直接調(diào)用DBMS服務(wù)器。推薦在服務(wù)端Java開發(fā)中使用這種驅(qū)動(dòng),這就是“瘦”驅(qū)動(dòng)。RDBMS純Java驅(qū)動(dòng)私有協(xié)議純Java客戶端DBMS網(wǎng)絡(luò)協(xié)議JDBC結(jié)構(gòu)JDBCAPI(分成兩個(gè)程序包)Java.sql核心API,這是Java2標(biāo)準(zhǔn)版的一部分。提供對(duì)數(shù)據(jù)庫(kù)更新、插入和刪除的類和接口。Javax.sql可選擴(kuò)展API,這是Java2企業(yè)版的一部分。這部分API包含了基于Java命名和目錄接口(JNDI)的資源,以及管理連接池、分布式事務(wù)和數(shù)據(jù)行集的類。JDBC結(jié)構(gòu)JDBC應(yīng)用結(jié)構(gòu)示意圖使用JDBC訪問(wèn)數(shù)據(jù)庫(kù)的基本步驟1.加載一個(gè)JDBC驅(qū)動(dòng)。2.定義一個(gè)URL連接。3.建立這個(gè)連接。4.建立一個(gè)SQL查詢語(yǔ)句的對(duì)象。5.執(zhí)行這個(gè)SQL查詢語(yǔ)句。6.處理查詢結(jié)果集。7.關(guān)閉連接。JDBC類與接口Java.sql.Driver接口可以通過(guò)驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn),驅(qū)動(dòng)都是某一個(gè)特定的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的實(shí)現(xiàn)。連接到數(shù)據(jù)庫(kù)的應(yīng)用程序要求具備該數(shù)據(jù)庫(kù)的特定驅(qū)動(dòng)。DBMS供應(yīng)商通常提供了相應(yīng)的驅(qū)動(dòng),任何驅(qū)動(dòng)必須實(shí)現(xiàn)Driver接口。驅(qū)動(dòng)在應(yīng)用程序中處理JDBC語(yǔ)句,并把它們包含的SQL參數(shù)發(fā)送給數(shù)據(jù)庫(kù)引擎。JDBC類與接口定義JDBC驅(qū)動(dòng)(Driver)Driver的定義是非常簡(jiǎn)單的,Driver要給出要用到的classname。如果要使用JDBC-ODBC橋驅(qū)動(dòng),定義是這樣的:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);在使用Class.forName之前,應(yīng)先導(dǎo)入import語(yǔ)句。importjava.sql.*;如果使用JDBCDriver,是這樣定義的:Class.forName(“jdbc.driver_class_name”);連接OracleJdbc驅(qū)動(dòng):Class.forName(“oracle.jdbc.driver.OracleDriver”);連接mySQLJdbc驅(qū)動(dòng):Class.forName(“org.git.mm.mysql.Driver”);JDBC類與接口定義數(shù)據(jù)庫(kù)URL數(shù)據(jù)庫(kù)URL,是指一個(gè)完全合格的數(shù)據(jù)庫(kù)連接名稱,該名稱標(biāo)識(shí)所要連接的數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)連接程序。要?jiǎng)?chuàng)建一個(gè)連接對(duì)象實(shí)例,必須以數(shù)據(jù)庫(kù)URL作為參數(shù)去激發(fā)DriverManager類的getConnection()方法。JDBC類與接口數(shù)據(jù)庫(kù)URL字符串表示:JDBC:PROTOCOL:NAMEJDBC是指對(duì)所有的JDBC數(shù)據(jù)庫(kù)URL中所用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序類型的關(guān)鍵字。PROTOCOL是指用戶要連接的數(shù)據(jù)庫(kù)類型。NAME提供建立連接時(shí)所需要的數(shù)據(jù)庫(kù)類型的額外信息。JDBC類與接口Java.sql.DriverManager類DriverManager類是JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間。DriverManager類跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。另外,DriverManager類也可處理諸如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。JDBC類與接口Java.sql.DriverManager類的方法當(dāng)DriverManager激發(fā)getConnection()方法時(shí),DriverManager類首先從它已加載的驅(qū)動(dòng)程序池中找到一個(gè)可以接受該數(shù)據(jù)庫(kù)URL的驅(qū)動(dòng)程序,然后請(qǐng)求該驅(qū)動(dòng)程序使用相關(guān)的數(shù)據(jù)庫(kù)URL去連接到數(shù)據(jù)庫(kù)中。于是,getConnection()方法建立了與數(shù)據(jù)庫(kù)的連接。JDBC允許用戶使用調(diào)用DriverManager的方法getDriver()、getDrivers()、registerDriver()及Driver的connect()JDBC類與接口getConnection()方法返回一個(gè)連接對(duì)象。getConnection()方法的三種形式:getConnection(Stringurl)只是簡(jiǎn)單地給定數(shù)據(jù)庫(kù)url,然后嘗試連接。getConnection(Stringurl,StringUser,StringPassword)給定數(shù)據(jù)庫(kù)url、數(shù)據(jù)庫(kù)的用戶名、數(shù)據(jù)庫(kù)的用戶使用密碼,然后嘗試連接。getConnection(Stringurl,java.util.Propertiesinformation)給定數(shù)據(jù)庫(kù)的url以及一個(gè)屬性集合作為參數(shù),然后嘗試連接。JDBC類與接口Connection接口Connection接口表示到數(shù)據(jù)庫(kù)的連接,也就是在已經(jīng)加載的Driver和數(shù)據(jù)庫(kù)之間建立連接,它定義了和數(shù)據(jù)庫(kù)的大部分交互。必須創(chuàng)建一個(gè)Connectionclass的實(shí)例,其中包括數(shù)據(jù)庫(kù)的信息。連接過(guò)程包括所執(zhí)行的SQL語(yǔ)句和在該連接上所返回的結(jié)果。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫(kù)有一個(gè)或多個(gè)連接,或者可與許多數(shù)據(jù)庫(kù)有連接。JDBC類與接口在編程中,連接可以使用DriverManager.getConnection()來(lái)獲得,也可以使用數(shù)據(jù)源的DataSource.getConnection()來(lái)獲得。在默認(rèn)情況下,Connection對(duì)象使用auto-commit的事務(wù)模式,這意味著當(dāng)執(zhí)行每個(gè)SQL語(yǔ)句后它自動(dòng)提交結(jié)果。如果不是使用auto-commit的事務(wù)模式,那么在編程中要明確調(diào)用commit()方法來(lái)執(zhí)行生效,否則數(shù)據(jù)庫(kù)的改變將不會(huì)被保存。JDBC類與接口Statement接口Statement用于執(zhí)行SQL語(yǔ)句,返回結(jié)果。在默認(rèn)情況下,一個(gè)Statement只能打開一個(gè)ResultSet對(duì)象。如果一個(gè)結(jié)果集和另一個(gè)結(jié)果集存在交叉讀取的情況,那么需要使用兩個(gè)Statement來(lái)產(chǎn)生這些ResultSet。JDBC類與接口Statement中的每個(gè)執(zhí)行方法(Execute)都自動(dòng)關(guān)閉當(dāng)前的ResultSet對(duì)象。Statement對(duì)象用于將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中。實(shí)際上有三種Statement對(duì)象,它們都作為在給定連接上執(zhí)行SQL語(yǔ)句的包容器:Statement、PreparedStatement、CallableStatement。JDBC類與接口當(dāng)打開一個(gè)數(shù)據(jù)庫(kù)的連接后,Java應(yīng)用程序通常通過(guò)創(chuàng)建與執(zhí)行一系列的SQL語(yǔ)句命令來(lái)實(shí)際使用該連接。這些SQL命令作為數(shù)據(jù)庫(kù)的語(yǔ)句執(zhí)行,完成一些操作。JDBC支持三種類型語(yǔ)句:Statement:用來(lái)立即執(zhí)行SQL語(yǔ)句。PreparedStatement:用來(lái)執(zhí)行編譯后的SQL語(yǔ)句。CallableStatement:用來(lái)執(zhí)行存儲(chǔ)過(guò)程。JDBC類與接口Statement對(duì)象用來(lái)執(zhí)行靜態(tài)SQL語(yǔ)句,并獲得它的處理結(jié)果??墒褂肅onnection對(duì)象中的createStatement()方法創(chuàng)建Statement對(duì)象,然后通過(guò)調(diào)用適當(dāng)?shù)姆椒▉?lái)執(zhí)行它。對(duì)于SELECT語(yǔ)句使用的方法是:executeQuery()對(duì)于UPDATE、DELETE或DDL等語(yǔ)句使用executeUpdate()方法。JDBC類與接口PreparedStatement對(duì)象該對(duì)象用來(lái)預(yù)編譯SQL語(yǔ)句,可以把SQL語(yǔ)句預(yù)編譯并存儲(chǔ)在PreparedStatement對(duì)象中,然后這個(gè)對(duì)象可以用來(lái)多次高效執(zhí)行SQL語(yǔ)句。PreparedStatement接口擴(kuò)展了Statement接口,PreparedStatement提供了對(duì)IN參數(shù)的支持,IN參數(shù)就是在創(chuàng)建SQL語(yǔ)句的時(shí)候,沒(méi)有指定具體值的參數(shù)。JDBC類與接口用?表示的參數(shù)標(biāo)記可以用來(lái)指定輸入值。PreparedStatement引進(jìn)了一系列的setXXX()方法,用來(lái)設(shè)置特定參數(shù)的值。XXX代表了數(shù)據(jù)類型。對(duì)于SELECT語(yǔ)句使用的方法是:executeQuery()對(duì)于UPDATE、DELETE或DDL等語(yǔ)句使用executeUpdate()方法。JDBC類與接口CallableStatement對(duì)象該接口擴(kuò)展了PreparedStatement接口,可以使用存儲(chǔ)過(guò)程。它包含了執(zhí)行和從存儲(chǔ)過(guò)程中得到結(jié)果的方法。該對(duì)象有Connection對(duì)象創(chuàng)建,要獲得CallableStatement對(duì)象,可以調(diào)用Connection對(duì)象的prepareCall()方法。JDBC類與接口它最多可以提供三種類型的參數(shù):IN、OUT和INOUT。任何輸入?yún)?shù)必須使用setXXX()方法指定。任何輸出參數(shù)必須用registerOutParameter()方法注冊(cè)它們的數(shù)據(jù)類型。一旦設(shè)置了全部參數(shù),可以調(diào)用CallableStatement的execute()方法。執(zhí)行存儲(chǔ)過(guò)程后,可以使用getXXX()方法從輸出參數(shù)中得到值。JDBC類與接口ResultSet結(jié)果集代表執(zhí)行查詢后的記錄,它以表的形式存在。ResultSet通常由Statement執(zhí)行數(shù)據(jù)查詢而獲得。ResultSet對(duì)象維持結(jié)果集的當(dāng)前指針,通常指向第一行的前一個(gè)位置。默認(rèn)情況下,Result

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論