網(wǎng)絡(luò)編程在Servlet中使用數(shù)據(jù)庫.ppt_第1頁
網(wǎng)絡(luò)編程在Servlet中使用數(shù)據(jù)庫.ppt_第2頁
網(wǎng)絡(luò)編程在Servlet中使用數(shù)據(jù)庫.ppt_第3頁
網(wǎng)絡(luò)編程在Servlet中使用數(shù)據(jù)庫.ppt_第4頁
網(wǎng)絡(luò)編程在Servlet中使用數(shù)據(jù)庫.ppt_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第 6 章,在Servlet中使用數(shù)據(jù)庫,本章要點(diǎn),利用Servlet訪問數(shù)據(jù)庫的編程方法。 JDBC驅(qū)動程序的類型 使用JDBC的編程方法 使用JDBC的編程實(shí)例,JDBC概述,Java 語言提供了一套訪問關(guān)系數(shù)據(jù)庫的應(yīng)用程序編程接口,也就是JDBC API。 JDBC(Java DataBase Connectivity),代表Java 數(shù)據(jù)庫互連,它包含一組Java 語言編寫的類和接口,是Java 數(shù)據(jù)庫應(yīng)用的基礎(chǔ)。 在Java 語言中利用JDBC,應(yīng)用程序就可以用統(tǒng)一的形式訪問各種關(guān)系數(shù)據(jù)庫。,JDBC的框架結(jié)構(gòu),JDBC的框架結(jié)構(gòu)說明,在圖的頂層,Java 應(yīng)用程序可以是 小應(yīng)用程序(Applet), 獨(dú)立運(yùn)行的應(yīng)用程序(Application) 服務(wù)器端運(yùn)行的Severlet EJB 組件 Java 應(yīng)用程序通過JDBC 接口,經(jīng)由JDBC 驅(qū)動程序管理器、JDBC Driver API 和JDBC驅(qū)動程序來訪問下層的數(shù)據(jù)庫。,JDBC驅(qū)動程序類型,JDBC-ODBC橋:把標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)換成對應(yīng)的ODBC調(diào)用。 Java到本地API的驅(qū)動:利用本地函數(shù)庫直接與數(shù)據(jù)庫通信。(必須在每臺使用該驅(qū)動程序的機(jī)器上安裝和配置),JDBC驅(qū)動程序類型,Java到專有網(wǎng)絡(luò)協(xié)議:適于在Internet網(wǎng)上使用。 全Java驅(qū)動程序:在數(shù)據(jù)庫服務(wù)器內(nèi)部中通過JDBC 訪問數(shù)據(jù)庫的SQL 引擎,進(jìn)而存取訪問數(shù)據(jù)庫。這種方法需要數(shù)據(jù)庫服務(wù)器提供對Java 的支持。,JDBC的組成部分,JDBC API包括5個組成部分: 驅(qū)動程序管理器(Driver Manager) 連接(Connection) 驅(qū)動程序(Driver) 語句(Statement) 結(jié)果集(ResultSet),JDBC 中的主要類和接口,JDBC 是由一系列的類和接口組成,其中核心的類和接口包含在java.sql 包中。,DriverManager 類,java.sql.DriverManager 是從Java 的根類Object 派生下來的一個類。 定義了一個向量類(java.util.Vector)的靜態(tài)對象drivers,用于保存已加載的、可用的數(shù)據(jù)庫驅(qū)動程序。 定義的靜態(tài)方法getConnection 可以用于連接數(shù)據(jù)庫。 另外,該類也可以用于處理數(shù)據(jù)庫登錄超時(loginTimeout)和跟蹤消息的顯示等事情。,java.sql.Driver 接口規(guī)定了所有的JDBC 驅(qū)動程序必須實(shí)現(xiàn)的方法。 當(dāng)加載或注冊一個數(shù)據(jù)庫驅(qū)動程序時,實(shí)際上是創(chuàng)建數(shù)據(jù)庫驅(qū)動程序的一個實(shí)例,并在DriverManager 類中的靜態(tài)Vector 類型變量Drivers 中保存,以便對其進(jìn)行管理。 作用:保證Java 語言可以使用統(tǒng)一的形式,通過不同的數(shù)據(jù)庫驅(qū)動器訪問各種數(shù)據(jù)庫。,Driver 接口,Connection接口,java.sql.Connection 是java.sql 包中定義的一個接口,其功能是建立與數(shù)據(jù)庫的連接。與數(shù)據(jù)庫的連接是應(yīng)用程序存取訪問數(shù)據(jù)庫的基礎(chǔ)。 在該接口內(nèi)聲明的createStatement 方法是最常用的,其功能是創(chuàng)建一個SQL 語句; 聲明的close 方法可以用于關(guān)閉與數(shù)據(jù)庫的連接。,Statement 接口,在java.sql.Statement 接口中聲明了執(zhí)行SQL 語句和獲取返回結(jié)果的方法。 executeUpdate 方法用于執(zhí)行SQL 的更新語句和數(shù)據(jù)定義語句,即INSERT、UPDATE、DELETE 語句和CREATE TABLE 語句等; executeQuery 方法用于執(zhí)行SQL 的查詢語句(SELECT 語句)。 getResultSet 方法用于獲取返回的結(jié)果集(ResultSet)。 close 方法用于關(guān)閉statement 接口引用的對象并立即釋放該對象占用的資源。,使用JDBC 訪問數(shù)據(jù)庫,訪問數(shù)據(jù)庫的一般步驟如下: 建立與數(shù)據(jù)庫的連接; 查詢處理; 關(guān)閉連接。 對于JDBC 數(shù)據(jù)庫應(yīng)用程序,也基本遵循這個步驟。,JDBC 訪問數(shù)據(jù)庫的主要步驟:,加載JDBC 驅(qū)動程序,在訪問數(shù)據(jù)庫之前,必須將JDBC drivers 驅(qū)動程序加載到Java 虛擬機(jī)中。加載驅(qū)動程序有兩種可供選擇的辦法: 用DriverManager 類的靜態(tài)方法registerDriver 來加載。 用java.lang.Class 類的forName 方法來加載,直接實(shí)例化一個對應(yīng)于驅(qū)動程序的類來完成。,常用數(shù)據(jù)庫JDBC 驅(qū)動程序的加載示例,1加載Oracle JDBC 驅(qū)動程序 用DriverManager 類的registerDriver 方法來加載,Java 代碼如下: DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver(); 加載的驅(qū)動程序不存在時,則會出現(xiàn)異常,registerDriver 方法會拋出SQLException 異常,需要進(jìn)行異常處理。,使用java.lang.Class 類的forName方法加載Oracle JDBC 驅(qū)動程序的Java 代碼如下: Class c = Class.forName(“Oracle.jdbc.driver.OracleDriver“); 如果要加載的的驅(qū)動程序不存在, 該方法可能會拋出ClassNotFoundException 異常,同樣需要進(jìn)行異常處理。,2加載Microsoft SQL Server JDBC 驅(qū)動程序 使用DriverManager 類來加載 DriverManager.registerDriver (new com.microsoft.jdbc.sqlserver.SQLServerDriver(); 使用java.lang.Class 類加載 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); 其中,“com.microsoft.jdbc.sqlserver.SQLServerDriver”是Microsoft SQL Server JDBC 驅(qū)動程序的類名。,3加載JDBC-ODBC 橋驅(qū)動程序 使用DriverManager 類來加載 DriverManager.registerDriver(new sun.jdbc.JdbcOdbcDriver(); 使用java.lang.Class 類加載Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); 其中,“sun.jdbc.odbc.JdbcOdbcDriver”是數(shù)據(jù)庫驅(qū)動程序的類名。,創(chuàng)建數(shù)據(jù)庫連接,裝入驅(qū)動程序后,建立與數(shù)據(jù)庫連接的語句有: Connection conn = DriverManager.getConnection(數(shù)據(jù)庫URL, User, Password); 其中:數(shù)據(jù)庫的URL,用于定位數(shù)據(jù)庫。 一般格式:jdbc:子協(xié)議名:子名稱 子協(xié)議名:表示數(shù)據(jù)庫驅(qū)動程序名或數(shù)據(jù)庫連接機(jī)制,例如,Oracle JDBC 驅(qū)動程序的子協(xié)議都是oracle; 子名稱,用于標(biāo)識要連接的數(shù)據(jù)庫,子名稱的結(jié)構(gòu)和內(nèi)容由各驅(qū)動程序開發(fā)商規(guī)定。,創(chuàng)建數(shù)據(jù)庫連接,與數(shù)據(jù)庫建立連接的另一個方法是調(diào)用DriverManager 類的靜態(tài)方法getConnection(String connect_string)。 代碼如下: Connection conn = DriverManager.getConnection(String connect_string); 例:String connURL=“jdbc:odbc:AccessDataSource”; Connection con = DriverManager.getConnection(connURL);,注冊的一個數(shù)據(jù)源,創(chuàng)建SQL 語句對象,與數(shù)據(jù)庫建立連接后,應(yīng)用程序在此連接上可創(chuàng)建SQL 語句對象,以便執(zhí)行用戶定義的特定SQL 語句。 Connection 中定義了3 種createStatement 方法。 Statement createStatement( ) throws SQLException; Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException; Statement createStatement(int resultSetType, int resultSetConcurrency,int resultSetHoldability) throws SQLException;,創(chuàng)建SQL 語句對象,創(chuàng)建語句如下: Statement stmt = con.createStatement( ); Statement對象有3種不同的類型: 基本的Statement對象:執(zhí)行一些只執(zhí)行一次的查詢和DDL語句(如Create Table、DropTable操作)。 預(yù)備的Statement對象:適用于需要多次執(zhí)行并且?guī)?shù)的SQL語句。 執(zhí)行存儲過程的Statement對象:執(zhí)行存儲過程。,執(zhí)行Statement,基本的SQL 語句可以分成兩大類: 數(shù)據(jù)定義和更新語句 包括CREATE、INSERT、UPDATE 和DELETE 語句。 SELECT 查詢語句 對于不同類型的SQL 語句,JDBC 中的Statement 對象提供了執(zhí)行不同SQL 語句的基本處理方法: executeUpdate 方法用于執(zhí)行數(shù)據(jù)定義和更新語句; executeQuery 方法用于執(zhí)行SELECT 查詢語句。,例: 執(zhí)行查詢語句 /創(chuàng)建一個Statement 對象 Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery(“SELECT * FROM myTable“); 例:執(zhí)行數(shù)據(jù)更新語句(DELETE 語句) /創(chuàng)建一個Statement 對象 Statement stmt = conn.createStatement(); int rowcount = stmt.executeUpdate(“DELETE FROM myTable WHERE Sno = 04160001“);,處理查詢結(jié)果集,不同的SQL語句返回的結(jié)果是不同的。更改語句返回一個整數(shù),查詢語句返回一個結(jié)果集對象,每個結(jié)果集對象都有一個游標(biāo)(cursor)指向結(jié)果集的當(dāng)前位置,游標(biāo)的初始位置在第一行。 可以用ResultSet對象的一些方法再對結(jié)果集進(jìn)行操作。(getString()、getInt()等)。 可以用next()方法在記錄中移動游標(biāo)定位結(jié)果集中的記錄。,利用next()方法和循環(huán)語句,可以方便地定位結(jié)果集中的記錄行。 while (rset.next() String Sno = rset.getString(“Sno“); String Sname = rset.getString(“Sname“); / 處理或顯示數(shù)據(jù) ,ResultSet 中定位游標(biāo)的方法及其功能說明,boolean absolute(int row) 將游標(biāo)移動到ResultSet 中由row 指定的行。 void afterLast() 將游標(biāo)移動到ResultSet 對象緊靠最后一行之后的位置。 void beforeFirst() 將游標(biāo)移動到ResultSet 對象緊靠第一行之前的位置。 boolean first() 將游標(biāo)移動到ResultSet 對象的第一行。 boolean isAfterLast() 判斷游標(biāo)是否在結(jié)果集中的最后一行之后。 boolean isBeforeFirst() 判斷游標(biāo)是否在結(jié)果集中的第一行之前。,ResultSet 中定位游標(biāo)的方法及其功能說明,boolean isFirst() 判斷游標(biāo)是否指向結(jié)果集中的第一行。 boolean isLast() 判斷游標(biāo)是否指向結(jié)果集中的最后一行。 boolean last() 將游標(biāo)移動到ResultSet 對象的最后一行。 boolean next() 將ResultSet 對象的當(dāng)前游標(biāo)從當(dāng)前位置下移一行。ResultSet 對象的游標(biāo)初始指向第一行之前的位置,首次調(diào)用next()方法則使游標(biāo)指向第一行。該方法如果使游標(biāo)成功地指向下一行,則返回true,否則(下一行不存在)返回false。 boolean previous() 將ResultSet 對象的當(dāng)前游標(biāo)從當(dāng)前位置上移一行。,關(guān)閉數(shù)據(jù)庫連接,當(dāng)ResultSet、Statement、Connection對象使用完畢時,都要調(diào)用它們的close()方法,釋放與其相關(guān)的所有資源。不能像一般的Java 對象那樣等待Java 虛擬機(jī)進(jìn)行垃圾回收。因?yàn)檫@些對象并不是我們用new出來的對象。,finally if(rset != null) rset.close( ); if(stmt != null) stmt.close( ); if(conn != null) conn.close( ); ,使用JDBC的實(shí)例,如何用基本的JDBC API 來訪問數(shù)據(jù)庫。 P8791 在Servlet中用JDBC查詢一個數(shù)據(jù)庫,將結(jié)果返回到客戶端并用表格顯示。 采

溫馨提示

  • 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

提交評論