版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 6 章,在Servlet中使用數(shù)據(jù)庫(kù),本章要點(diǎn),利用Servlet訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的編程方法。 JDBC驅(qū)動(dòng)程序的類(lèi)型 使用JDBC的編程方法 使用JDBC的編程實(shí)例,JDBC概述,Java 語(yǔ)言提供了一套訪(fǎng)問(wèn)關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口,也就是JDBC API。 JDBC(Java DataBase Connectivity),代表Java 數(shù)據(jù)庫(kù)互連,它包含一組Java 語(yǔ)言編寫(xiě)的類(lèi)和接口,是Java 數(shù)據(jù)庫(kù)應(yīng)用的基礎(chǔ)。 在Java 語(yǔ)言中利用JDBC,應(yīng)用程序就可以用統(tǒng)一的形式訪(fǎng)問(wèn)各種關(guān)系數(shù)據(jù)庫(kù)。,JDBC的框架結(jié)構(gòu),JDBC的框架結(jié)構(gòu)說(shuō)明,在圖的頂層,Java 應(yīng)用程序可以是 小應(yīng)用程序
2、(Applet), 獨(dú)立運(yùn)行的應(yīng)用程序(Application) 服務(wù)器端運(yùn)行的Severlet EJB 組件 Java 應(yīng)用程序通過(guò)JDBC 接口,經(jīng)由JDBC 驅(qū)動(dòng)程序管理器、JDBC Driver API 和JDBC驅(qū)動(dòng)程序來(lái)訪(fǎng)問(wèn)下層的數(shù)據(jù)庫(kù)。,JDBC驅(qū)動(dòng)程序類(lèi)型,JDBC-ODBC橋:把標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)換成對(duì)應(yīng)的ODBC調(diào)用。 Java到本地API的驅(qū)動(dòng):利用本地函數(shù)庫(kù)直接與數(shù)據(jù)庫(kù)通信。(必須在每臺(tái)使用該驅(qū)動(dòng)程序的機(jī)器上安裝和配置),JDBC驅(qū)動(dòng)程序類(lèi)型,Java到專(zhuān)有網(wǎng)絡(luò)協(xié)議:適于在Internet網(wǎng)上使用。 全Java驅(qū)動(dòng)程序:在數(shù)據(jù)庫(kù)服務(wù)器內(nèi)部中通過(guò)JDBC 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的S
3、QL 引擎,進(jìn)而存取訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。這種方法需要數(shù)據(jù)庫(kù)服務(wù)器提供對(duì)Java 的支持。,JDBC的組成部分,JDBC API包括5個(gè)組成部分: 驅(qū)動(dòng)程序管理器(Driver Manager) 連接(Connection) 驅(qū)動(dòng)程序(Driver) 語(yǔ)句(Statement) 結(jié)果集(ResultSet),JDBC 中的主要類(lèi)和接口,JDBC 是由一系列的類(lèi)和接口組成,其中核心的類(lèi)和接口包含在java.sql 包中。,DriverManager 類(lèi),java.sql.DriverManager 是從Java 的根類(lèi)Object 派生下來(lái)的一個(gè)類(lèi)。 定義了一個(gè)向量類(lèi)(java.util.Vector)的
4、靜態(tài)對(duì)象drivers,用于保存已加載的、可用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。 定義的靜態(tài)方法getConnection 可以用于連接數(shù)據(jù)庫(kù)。 另外,該類(lèi)也可以用于處理數(shù)據(jù)庫(kù)登錄超時(shí)(loginTimeout)和跟蹤消息的顯示等事情。,java.sql.Driver 接口規(guī)定了所有的JDBC 驅(qū)動(dòng)程序必須實(shí)現(xiàn)的方法。 當(dāng)加載或注冊(cè)一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序時(shí),實(shí)際上是創(chuàng)建數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的一個(gè)實(shí)例,并在DriverManager 類(lèi)中的靜態(tài)Vector 類(lèi)型變量Drivers 中保存,以便對(duì)其進(jìn)行管理。 作用:保證Java 語(yǔ)言可以使用統(tǒng)一的形式,通過(guò)不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)器訪(fǎng)問(wèn)各種數(shù)據(jù)庫(kù)。,Driver 接口,Conne
5、ction接口,java.sql.Connection 是java.sql 包中定義的一個(gè)接口,其功能是建立與數(shù)據(jù)庫(kù)的連接。與數(shù)據(jù)庫(kù)的連接是應(yīng)用程序存取訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的基礎(chǔ)。 在該接口內(nèi)聲明的createStatement 方法是最常用的,其功能是創(chuàng)建一個(gè)SQL 語(yǔ)句; 聲明的close 方法可以用于關(guān)閉與數(shù)據(jù)庫(kù)的連接。,Statement 接口,在java.sql.Statement 接口中聲明了執(zhí)行SQL 語(yǔ)句和獲取返回結(jié)果的方法。 executeUpdate 方法用于執(zhí)行SQL 的更新語(yǔ)句和數(shù)據(jù)定義語(yǔ)句,即INSERT、UPDATE、DELETE 語(yǔ)句和CREATE TABLE 語(yǔ)句等; e
6、xecuteQuery 方法用于執(zhí)行SQL 的查詢(xún)語(yǔ)句(SELECT 語(yǔ)句)。 getResultSet 方法用于獲取返回的結(jié)果集(ResultSet)。 close 方法用于關(guān)閉statement 接口引用的對(duì)象并立即釋放該對(duì)象占用的資源。,使用JDBC 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的一般步驟如下: 建立與數(shù)據(jù)庫(kù)的連接; 查詢(xún)處理; 關(guān)閉連接。 對(duì)于JDBC 數(shù)據(jù)庫(kù)應(yīng)用程序,也基本遵循這個(gè)步驟。,JDBC 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的主要步驟:,加載JDBC 驅(qū)動(dòng)程序,在訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)之前,必須將JDBC drivers 驅(qū)動(dòng)程序加載到Java 虛擬機(jī)中。加載驅(qū)動(dòng)程序有兩種可供選擇的辦法: 用DriverManage
7、r 類(lèi)的靜態(tài)方法registerDriver 來(lái)加載。 用java.lang.Class 類(lèi)的forName 方法來(lái)加載,直接實(shí)例化一個(gè)對(duì)應(yīng)于驅(qū)動(dòng)程序的類(lèi)來(lái)完成。,常用數(shù)據(jù)庫(kù)JDBC 驅(qū)動(dòng)程序的加載示例,1加載Oracle JDBC 驅(qū)動(dòng)程序 用DriverManager 類(lèi)的registerDriver 方法來(lái)加載,Java 代碼如下: DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver(); 加載的驅(qū)動(dòng)程序不存在時(shí),則會(huì)出現(xiàn)異常,registerDriver 方法會(huì)拋出SQLException 異常,需要進(jìn)行異
8、常處理。,使用java.lang.Class 類(lèi)的forName方法加載Oracle JDBC 驅(qū)動(dòng)程序的Java 代碼如下: Class c = Class.forName(Oracle.jdbc.driver.OracleDriver); 如果要加載的的驅(qū)動(dòng)程序不存在, 該方法可能會(huì)拋出ClassNotFoundException 異常,同樣需要進(jìn)行異常處理。,2加載Microsoft SQL Server JDBC 驅(qū)動(dòng)程序 使用DriverManager 類(lèi)來(lái)加載 DriverManager.registerDriver (new com.microsoft.jdbc.sqlserve
9、r.SQLServerDriver(); 使用java.lang.Class 類(lèi)加載 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); 其中,“com.microsoft.jdbc.sqlserver.SQLServerDriver”是Microsoft SQL Server JDBC 驅(qū)動(dòng)程序的類(lèi)名。,3加載JDBC-ODBC 橋驅(qū)動(dòng)程序 使用DriverManager 類(lèi)來(lái)加載 DriverManager.registerDriver(new sun.jdbc.JdbcOdbcDriver(); 使用java.lang
10、.Class 類(lèi)加載Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); 其中,“sun.jdbc.odbc.JdbcOdbcDriver”是數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的類(lèi)名。,創(chuàng)建數(shù)據(jù)庫(kù)連接,裝入驅(qū)動(dòng)程序后,建立與數(shù)據(jù)庫(kù)連接的語(yǔ)句有: Connection conn = DriverManager.getConnection(數(shù)據(jù)庫(kù)URL, User, Password); 其中:數(shù)據(jù)庫(kù)的URL,用于定位數(shù)據(jù)庫(kù)。 一般格式:jdbc:子協(xié)議名:子名稱(chēng) 子協(xié)議名:表示數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序名或數(shù)據(jù)庫(kù)連接機(jī)制,例如,Oracle JDBC 驅(qū)動(dòng)程序的子協(xié)議都是oracle; 子名
11、稱(chēng),用于標(biāo)識(shí)要連接的數(shù)據(jù)庫(kù),子名稱(chēng)的結(jié)構(gòu)和內(nèi)容由各驅(qū)動(dòng)程序開(kāi)發(fā)商規(guī)定。,創(chuàng)建數(shù)據(jù)庫(kù)連接,與數(shù)據(jù)庫(kù)建立連接的另一個(gè)方法是調(diào)用DriverManager 類(lèi)的靜態(tài)方法getConnection(String connect_string)。 代碼如下: Connection conn = DriverManager.getConnection(String connect_string); 例:String connURL=“jdbc:odbc:AccessDataSource”; Connection con = DriverManager.getConnection(connURL);,注冊(cè)的
12、一個(gè)數(shù)據(jù)源,創(chuàng)建SQL 語(yǔ)句對(duì)象,與數(shù)據(jù)庫(kù)建立連接后,應(yīng)用程序在此連接上可創(chuàng)建SQL 語(yǔ)句對(duì)象,以便執(zhí)行用戶(hù)定義的特定SQL 語(yǔ)句。 Connection 中定義了3 種createStatement 方法。 Statement createStatement( ) throws SQLException; Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException; Statement createStatement(int resultSetType, int resu
13、ltSetConcurrency,int resultSetHoldability) throws SQLException;,創(chuàng)建SQL 語(yǔ)句對(duì)象,創(chuàng)建語(yǔ)句如下: Statement stmt = con.createStatement( ); Statement對(duì)象有3種不同的類(lèi)型: 基本的Statement對(duì)象:執(zhí)行一些只執(zhí)行一次的查詢(xún)和DDL語(yǔ)句(如Create Table、DropTable操作)。 預(yù)備的Statement對(duì)象:適用于需要多次執(zhí)行并且?guī)?shù)的SQL語(yǔ)句。 執(zhí)行存儲(chǔ)過(guò)程的Statement對(duì)象:執(zhí)行存儲(chǔ)過(guò)程。,執(zhí)行Statement,基本的SQL 語(yǔ)句可以分成兩大類(lèi):
14、 數(shù)據(jù)定義和更新語(yǔ)句 包括CREATE、INSERT、UPDATE 和DELETE 語(yǔ)句。 SELECT 查詢(xún)語(yǔ)句 對(duì)于不同類(lèi)型的SQL 語(yǔ)句,JDBC 中的Statement 對(duì)象提供了執(zhí)行不同SQL 語(yǔ)句的基本處理方法: executeUpdate 方法用于執(zhí)行數(shù)據(jù)定義和更新語(yǔ)句; executeQuery 方法用于執(zhí)行SELECT 查詢(xún)語(yǔ)句。,例:執(zhí)行查詢(xún)語(yǔ)句 /創(chuàng)建一個(gè)Statement 對(duì)象 Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery(SELECT * FROM myTable
15、); 例:執(zhí)行數(shù)據(jù)更新語(yǔ)句(DELETE 語(yǔ)句) /創(chuàng)建一個(gè)Statement 對(duì)象 Statement stmt = conn.createStatement(); int rowcount = stmt.executeUpdate(DELETE FROM myTable WHERE Sno = 04160001);,處理查詢(xún)結(jié)果集,不同的SQL語(yǔ)句返回的結(jié)果是不同的。更改語(yǔ)句返回一個(gè)整數(shù),查詢(xún)語(yǔ)句返回一個(gè)結(jié)果集對(duì)象,每個(gè)結(jié)果集對(duì)象都有一個(gè)游標(biāo)(cursor)指向結(jié)果集的當(dāng)前位置,游標(biāo)的初始位置在第一行。 可以用ResultSet對(duì)象的一些方法再對(duì)結(jié)果集進(jìn)行操作。(getString()、g
16、etInt()等)。 可以用next()方法在記錄中移動(dòng)游標(biāo)定位結(jié)果集中的記錄。,利用next()方法和循環(huán)語(yǔ)句,可以方便地定位結(jié)果集中的記錄行。 while (rset.next() String Sno = rset.getString(Sno); String Sname = rset.getString(Sname); / 處理或顯示數(shù)據(jù) ,ResultSet 中定位游標(biāo)的方法及其功能說(shuō)明,boolean absolute(int row) 將游標(biāo)移動(dòng)到ResultSet 中由row 指定的行。 void afterLast() 將游標(biāo)移動(dòng)到ResultSet 對(duì)象緊靠最后一行之后的位
17、置。 void beforeFirst() 將游標(biāo)移動(dòng)到ResultSet 對(duì)象緊靠第一行之前的位置。 boolean first() 將游標(biāo)移動(dòng)到ResultSet 對(duì)象的第一行。 boolean isAfterLast() 判斷游標(biāo)是否在結(jié)果集中的最后一行之后。 boolean isBeforeFirst() 判斷游標(biāo)是否在結(jié)果集中的第一行之前。,ResultSet 中定位游標(biāo)的方法及其功能說(shuō)明,boolean isFirst() 判斷游標(biāo)是否指向結(jié)果集中的第一行。 boolean isLast() 判斷游標(biāo)是否指向結(jié)果集中的最后一行。 boolean last() 將游標(biāo)移動(dòng)到Resul
18、tSet 對(duì)象的最后一行。 boolean next() 將ResultSet 對(duì)象的當(dāng)前游標(biāo)從當(dāng)前位置下移一行。ResultSet 對(duì)象的游標(biāo)初始指向第一行之前的位置,首次調(diào)用next()方法則使游標(biāo)指向第一行。該方法如果使游標(biāo)成功地指向下一行,則返回true,否則(下一行不存在)返回false。 boolean previous() 將ResultSet 對(duì)象的當(dāng)前游標(biāo)從當(dāng)前位置上移一行。,關(guān)閉數(shù)據(jù)庫(kù)連接,當(dāng)ResultSet、Statement、Connection對(duì)象使用完畢時(shí),都要調(diào)用它們的close()方法,釋放與其相關(guān)的所有資源。不能像一般的Java 對(duì)象那樣等待Java 虛擬機(jī)進(jìn)行垃圾回收。因?yàn)檫@些對(duì)象并不是我們用new出來(lái)的對(duì)象。,finally if(rset != null) rset.close( ); if(stmt != null) stmt.close( ); if(conn != null) conn.close( ); ,使用JDBC的實(shí)例,如何用基本的JDBC API 來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。 P8791 在Servlet中用JDBC查詢(xún)一個(gè)數(shù)據(jù)庫(kù),將結(jié)果返回到客戶(hù)端并用表格顯示。 采用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026春季學(xué)期江西贛州市第二中學(xué)招聘頂崗教師考試備考題庫(kù)及答案解析
- 2026浙江溫州市平陽(yáng)縣順溪鎮(zhèn)招聘編外人員1人筆試備考題庫(kù)及答案解析
- 蔬菜配送公司出納管理制度(3篇)
- 晚間烘焙活動(dòng)策劃方案(3篇)
- 沙雅餐飲活動(dòng)策劃方案(3篇)
- 贛州通天巖風(fēng)景名勝區(qū)開(kāi)發(fā)管理有限責(zé)任公司公開(kāi)招聘勞務(wù)外包制工作人員備考考試題庫(kù)及答案解析
- 2026山東事業(yè)單位統(tǒng)考棗莊市市直招聘初級(jí)綜合類(lèi)崗位58人考試參考試題及答案解析
- 2026云南昆明高新區(qū)第二幼兒園招聘6人考試參考題庫(kù)及答案解析
- 2026年騰沖市綜合行政執(zhí)法局城市管理協(xié)管員招聘(16人)參考考試題庫(kù)及答案解析
- 2026上海楊浦區(qū)中意工程創(chuàng)新學(xué)院外聯(lián)崗位招聘1人筆試模擬試題及答案解析
- 《直腸癌NCCN治療指南》課件
- 江西省九江市2024-2025學(xué)年九年級(jí)上期末考試英語(yǔ)試題
- 二人合伙土地種植合同
- 湖南省張家界市永定區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 生物質(zhì)能燃料供應(yīng)合同
- 環(huán)境監(jiān)測(cè)崗位職業(yè)技能考試題庫(kù)含答案
- 路燈基礎(chǔ)現(xiàn)澆混凝土檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 化學(xué)品作業(yè)場(chǎng)所安全警示標(biāo)志大全
- 礦卡司機(jī)安全教育考試卷(帶答案)
- 中建淺圓倉(cāng)漏斗模板支撐架安全專(zhuān)項(xiàng)施工方案
- 新能源材料與器件PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論