第4章_JDBC數(shù)據(jù)庫訪問技術_第1頁
第4章_JDBC數(shù)據(jù)庫訪問技術_第2頁
第4章_JDBC數(shù)據(jù)庫訪問技術_第3頁
第4章_JDBC數(shù)據(jù)庫訪問技術_第4頁
第4章_JDBC數(shù)據(jù)庫訪問技術_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第4章章 JDBC數(shù)據(jù)庫訪問技術數(shù)據(jù)庫訪問技術 數(shù)據(jù)庫是Web應用程序重要組成部分,在Java Web應用程序中,數(shù)據(jù)庫訪問是通過Java數(shù)據(jù)庫連接(Java DataBase Connectivity,簡稱JDBC )實現(xiàn)的。JDBC為開發(fā)人員提供了一個標準的API。 本章介紹使用JDBC驅動程序連接數(shù)據(jù)庫和使用連接池技術連接數(shù)據(jù)庫并設計應用程序的方法、步驟和實例。第第4章章 JDBC數(shù)據(jù)庫訪問技術數(shù)據(jù)庫訪問技術4.1 JDBC技術概述技術概述4.2 JDBC訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫4.3 綜合案例綜合案例學生身體體質信息管理系統(tǒng)的開發(fā)學生身體體質信息管理系統(tǒng)的開發(fā)4.4 數(shù)據(jù)源與連接池技術數(shù)

2、據(jù)源與連接池技術本章小結本章小結4.1 JDBC技術概述技術概述 JDBC是一種用于執(zhí)行SQL語句的Java API,由一組類與接口組成,通過調用這些類和接口所提供的方法,可以使用標準的SQL語言來存取數(shù)據(jù)庫中的數(shù)據(jù)。本節(jié)內容:4.1.1 驅動程序接口Driver4.1.2 驅動程序管理器DriverManager4.1.3 數(shù)據(jù)庫連接接口Connection4.1.4 執(zhí)行SQL語句接口Statement4.1.5 執(zhí)行動態(tài)SQL語句接口PreparedStatement4.1.6 訪問結果集接口ResultSet類或接口作用java.sql.DriverManager該類處理驅動程序的加載

3、和建立新數(shù)據(jù)庫連接java.sql.Connection該接口實現(xiàn)對特定數(shù)據(jù)庫的連接java.sql.Satement該接口表示用于執(zhí)行靜態(tài)SQL語句并返回它所生成結果的對象java.sql.PreparedStatement該接口表示預編譯的SQL語句的對象,派生自Satement,預編譯SQL效率高且支持參數(shù)查詢java.sql.CallableStatement該接口表示用于執(zhí)行SQL語句存儲過程的對象。派生自PreparedStatement,用于調用數(shù)據(jù)庫中的存儲過程java.sql.ResultSet該接口表示數(shù)據(jù)庫結果集的數(shù)據(jù)表,統(tǒng)稱通過執(zhí)行查詢數(shù)據(jù)庫的語句生成4.1.1 驅動程

4、序接口Driver 每種數(shù)據(jù)庫都提供了數(shù)據(jù)庫驅動程序,并且都提供了一個實現(xiàn)java.sql.Driver接口的類,簡稱Driver類。 在應用程序開發(fā)中,需要通過java.lang.Class類的靜態(tài)方法forName(String className),加載該Driver類。在加載時,創(chuàng)建自己的實例并向java.sql.DriverManager類注冊該實例。4.1.2 驅動程序管理器驅動程序管理器DriverManager java.sql.DriverManager類負責管理JDBC驅動程序的基本服務,是JDBC的管理層,作用于用戶和驅動程序之間,負責跟蹤可用的驅動程序,并在數(shù)據(jù)庫和驅動

5、程序之間建立連接。 DriverManager類即可用來建立數(shù)據(jù)庫連接。 DriverManager類提供的最常用的方法是: Connection getConnection(String url,String user,String password) 該方法為靜態(tài)方法,用來獲得數(shù)據(jù)庫連接,有3個入口參數(shù),依次為要連接數(shù)據(jù)庫的URL、用戶名和密碼,返回值類型為java.sql.Connection4.1.3 數(shù)據(jù)庫連接接口數(shù)據(jù)庫連接接口Connection java.sql.Connection接口負責與特定數(shù)據(jù)庫的連接,形成連接對象。由該對象完成相關的操作。方法名稱功能描述createSt

6、atement()創(chuàng)建并返回一個Statement實例,通常在執(zhí)行無參數(shù)的SQL語句時創(chuàng)建該實例prepareStatement()創(chuàng)建并返回一個PreparedStatement實例,通常在執(zhí)行包含參數(shù)的SQL語句時創(chuàng)建該實例,并對SQL語句進行了預編譯處理close()立即釋放Connection實例占用的數(shù)據(jù)庫和JDBC資源,即關閉數(shù)據(jù)庫連接表4-2 Connection接口的常用方法4.1.4 執(zhí)行執(zhí)行SQL語句接口語句接口Statement java.sql.Statement接口用來執(zhí)行靜態(tài)的SQL語句,并返回執(zhí)行結果。Statement接口提供的常用方法。方法名稱功能描述exec

7、uteQuery(String sql)執(zhí)行指定的靜態(tài)SELECT語句,并返回一個永遠不能為null的ResultSet實例executeUpdate(String sql)執(zhí)行指定的靜態(tài)INSERT、UPDATE或DELETE語句,并返回一個int型數(shù)值,為同步更新記錄的條數(shù)close()立即釋放Statement實例占用的數(shù)據(jù)庫和JDBC資源,即關閉Statement實例4.1.5 執(zhí)行動態(tài)SQL語句接口 PreparedStatement java.sql.PreparedStatement接口繼承于Statement接口,是Statement接口的擴展,用來執(zhí)行動態(tài)的SQL語句,即包含

8、參數(shù)的SQL語句。PreparedStatement接口提供的常用方法。方法名稱功能描述executeQuery()執(zhí)行前面包含參數(shù)的動態(tài)SELECT語句,并返回一個永遠不能為null的ResultSet實例executeUpdate()執(zhí)行前面包含參數(shù)的動態(tài)INSERT、UPDATE或DELETE語句,并返回一個int型數(shù)值,為同步更新記錄的條數(shù)setXxx()為指定參數(shù)設置Xxx型值close()立即釋放Statement實例占用的數(shù)據(jù)庫和JDBC資源,即關閉Statement實例4.1.6 訪問結果集接口訪問結果集接口ResultSet 通過該接口的實例可以獲得檢索結果集,以及對應數(shù)據(jù)表

9、的相關信息。ResultSet實例是通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。ResultSet接口提供的常用方法。方法名稱功能描述first()移動指針到第一行;如果結果集為空則返回false,否則返回true;如果結果集類型為TYPE_FORWARD_ONLY將拋出異常last()移動指針到最后一行;如果結果集為空則返回false,否則返回true;如果結果集類型為TYPE_FORWARD_ONLY將拋出異常previous()移動指針到上一行;如果存在上一行則返回true,否則返回false;如果結果集類型為TYPE_FORWARD_ONLY將拋出異常next()移動指針到下一行;指針最初位于第一行

10、之前,第一次調用該方法將移動到第一行;如果存在下一行則返回true,否則返回falsegetRow()查看當前行的索引編號;索引編號從1開始,如果位于有效記錄行上則返回一個int型索引編號,否則返回0findColumn()查看指定列名的索引編號;該方法有一個String型入口參數(shù),為要查看列的名稱,如果包含指定列,則返回int型索引編號,否則將拋出異常close()釋放ResultSet實例占用的數(shù)據(jù)庫和JDBC資源,當關閉所屬的Statement實例時也將執(zhí)行此操作4.2 JDBC訪問數(shù)據(jù)庫使用使用JDBC訪問數(shù)據(jù)庫,其訪問流程是:訪問數(shù)據(jù)庫,其訪問流程是:(1)注冊驅動。)注冊驅動。(2

11、)建立連接)建立連接(Connection)。(3)創(chuàng)建數(shù)據(jù)庫操作對象用于執(zhí)行)創(chuàng)建數(shù)據(jù)庫操作對象用于執(zhí)行SQL的語句。的語句。(4)執(zhí)行語句。)執(zhí)行語句。(5)處理執(zhí)行結果)處理執(zhí)行結果(ResultSet)。(6)釋放資源。)釋放資源。本節(jié)內容:本節(jié)內容:4.2.1 注冊驅動注冊驅動MySQL的驅動程序的驅動程序4.2.2 JDBC連接數(shù)據(jù)庫創(chuàng)建連接對象連接數(shù)據(jù)庫創(chuàng)建連接對象4.2.3 創(chuàng)建數(shù)據(jù)庫的操作對象創(chuàng)建數(shù)據(jù)庫的操作對象4.2.4 執(zhí)行執(zhí)行SQL4.2.5 獲得查詢結果并進行處理獲得查詢結果并進行處理4.2.6 釋放資源釋放資源4.2.7 數(shù)據(jù)庫亂碼解決方案數(shù)據(jù)庫亂碼解決方案4.2.

12、1 注冊驅動MySQL的驅動程序1將驅動程序文件添加到應用項目將驅動程序文件添加到應用項目 將驅動程序將驅動程序mysql-connector-java-5.1.6-bin,拷貝到,拷貝到Web應應用程序的用程序的WEB-INFlib目錄下,目錄下,Web應用程序就可以通過應用程序就可以通過JDBC接口訪問接口訪問MySQL數(shù)據(jù)庫了。數(shù)據(jù)庫了。2加載注冊指定的數(shù)據(jù)庫驅動程序加載注冊指定的數(shù)據(jù)庫驅動程序 對于對于MySQL數(shù)據(jù)庫,其驅動程序加載格式:數(shù)據(jù)庫,其驅動程序加載格式: Class.forName(com.mysql.jdbc.Driver); 其中,其中,“com.mysql.jdbc

13、.Driver”為為MySQL數(shù)據(jù)庫驅動程序數(shù)據(jù)庫驅動程序類名。類名。4.2.2 JDBC連接數(shù)據(jù)庫創(chuàng)建連接對象 創(chuàng)建數(shù)據(jù)庫連接對象,需要首先形成創(chuàng)建數(shù)據(jù)庫連接對象,需要首先形成“連接符號字連接符號字(URL)”,然后利用,然后利用“連接符號字連接符號字”實現(xiàn)連接并創(chuàng)建連接對象。實現(xiàn)連接并創(chuàng)建連接對象。1數(shù)據(jù)庫連接的數(shù)據(jù)庫連接的URL 對于對于MySQL數(shù)據(jù)庫的連接符號字,可采用如下方式數(shù)據(jù)庫的連接符號字,可采用如下方式創(chuàng)建:創(chuàng)建:String url1=jdbc:mysql:/數(shù)據(jù)庫服務器數(shù)據(jù)庫服務器IP:3306/數(shù)據(jù)庫名數(shù)據(jù)庫名;String url2=?user=root&pa

14、ssword=密碼密碼;String url3=&useUnicode=true&characterEncoding=UTF-8;String url=url1+url2+ url3;2利用連接符號字實現(xiàn)連接,獲取連接對象利用連接符號字實現(xiàn)連接,獲取連接對象 DriverManager類提供了類提供了getConnection方法,用來建立與數(shù)方法,用來建立與數(shù)據(jù)庫的連接。調用據(jù)庫的連接。調用getConnection()方法可返回一個數(shù)據(jù)庫連接方法可返回一個數(shù)據(jù)庫連接對象。對象。getConnection方法有方法有3種不同的重載形式:種不同的重載形式:第第1種:通過種:通過

15、url指定的數(shù)據(jù)庫建立連接,其語法原型為:指定的數(shù)據(jù)庫建立連接,其語法原型為: static Connection getConnection(String url)第第2種:通過種:通過url指定的數(shù)據(jù)庫建立連接,指定的數(shù)據(jù)庫建立連接,info提供了一些屬性,提供了一些屬性,這些屬性里包括了這些屬性里包括了user和和password等屬性,其語法原型為:等屬性,其語法原型為: static Connection getConnection(String url,Properties info);第第3種:傳入?yún)?shù)用戶名為種:傳入?yún)?shù)用戶名為user,密碼為,密碼為password,通過,通

16、過url指指定的數(shù)據(jù)庫建立連接,其語法原型為:定的數(shù)據(jù)庫建立連接,其語法原型為: static Connection getConnection(String url,String user,String password):3.利用利用JDBC連接連接MySQL數(shù)據(jù)庫,獲取連接對象的通用格數(shù)據(jù)庫,獲取連接對象的通用格式式 設設MySQL數(shù)據(jù)庫為:數(shù)據(jù)庫為:“students”,用戶名為,用戶名為“root”,密碼為,密碼為“123456”,數(shù)據(jù)庫讀寫的編碼采用,數(shù)據(jù)庫讀寫的編碼采用UTF-8,連接格式:,連接格式:String driverName = com.mysql.jdbc.Driv

17、er; /驅動程序名驅動程序名String userName = root; /數(shù)據(jù)庫用戶名數(shù)據(jù)庫用戶名String userPwd = 123456; /密碼密碼String dbName = students; /數(shù)據(jù)庫名數(shù)據(jù)庫名String url1=jdbc:mysql:/localhost:3306/+dbName;String url2 =?user=+userName+&password=+userPwd;String url3=&useUnicode=true&characterEncoding=UTF-8;String url =url1+url2+u

18、rl3; /形成連接字形成連接字Class.forName(driverName); /加載并注冊驅動程序加載并注冊驅動程序/獲取數(shù)據(jù)庫連接對象獲取數(shù)據(jù)庫連接對象Connection conn=DriverManager.getConnection(url); 4.2.3 創(chuàng)建數(shù)據(jù)庫的操作對象 數(shù)據(jù)庫的操作對象是指能執(zhí)行SQL語句的對象,需要Connection類中創(chuàng)建數(shù)據(jù)庫的操作對象的方法實現(xiàn)創(chuàng)建。 可創(chuàng)建兩種不同的數(shù)據(jù)庫操作對象: Statement對象、PrepareStatement對象。1創(chuàng)建創(chuàng)建Statement對象對象 利用Connection類的方法createStatemen

19、t()可以創(chuàng)建一個Statement類實例,用來執(zhí)行SQL操作。 例如,假設通過數(shù)據(jù)庫連接,得到其連接對象為conn,那么,可創(chuàng)建Statement的一個實例stmt: Statement stmt = conn.createStatement(); 2創(chuàng)建創(chuàng)建PrepareStatement對象對象(1)PreparedStatement對象使用PreparedStatement()方法創(chuàng)建,并且在創(chuàng)建時直接指定SQL語句。例如: String sql=select * from stu_info PreparedStatement pstmt= conn.preparedStatement

20、(sql); (2)使用帶參數(shù)的SQL語句(“?”表示參數(shù)值),創(chuàng)建PreparedStatement對象。例如: String ss=select * from stu_info where age=? and sex=?; PreparedStatement pstmt= conn.preparedStatement(ss); 但在SQL語句中,沒有指定具體的年齡和性別,在實際執(zhí)行該SQL前,需要向PreparedStatement對象傳遞參數(shù)值。設置參數(shù)值的格式為: PreparedStatement對象.setXXX(position,value);4.2.4 執(zhí)行SQL 創(chuàng)建操作對象

21、后,就可以利用該對象,實現(xiàn)對數(shù)據(jù)庫的具體操作,即執(zhí)行SQL語句。1. Statement對象執(zhí)行對象執(zhí)行SQL語句語句 Statement主要提供了兩種執(zhí)行SQL語句的方法:(1)ResultSet executeQuery(String sql): 執(zhí)行select語句,返回一個結果集。(2)int executeUpdate(String sql): 執(zhí)行update、insert、delete,返回一個整數(shù),表示執(zhí)行SQL語句影響的數(shù)據(jù)行數(shù)。2 . PreparedStatemen對象執(zhí)行對象執(zhí)行SQL語句語句 PreparedStatement也有ResultSet executeQu

22、ery()和int executeUpdate()兩個方法,但都不帶參數(shù)。PreparedStatement兩種執(zhí)行SQL語句的方法:(1)ResultSet executeQuery(): 執(zhí)行select語句,返回一個結果集。(2)int executeUpdate(): 執(zhí)行update、insert、delete的SQL語句。它返回一個整數(shù),表示執(zhí)行SQL語句影響的數(shù)據(jù)行數(shù)。4.2.5 獲得查詢結果并進行處理 如果SQL語句是查詢語句,執(zhí)行executeQuery()方法返回的是ResultSet對象。ResultSet對象是一個由查詢結果構成的數(shù)據(jù)表。 對查詢結果的處理,一般需要,首

23、先定位記錄位置,然。后對確定記錄的字段項實現(xiàn)操作。1記錄定位操作記錄定位操作 在ResultSet結果記錄集中隱含著一個數(shù)據(jù)行指針,可使用4.1節(jié)中表4-5中的方法將指針移動到指定的數(shù)據(jù)行。2.讀取指定字段的數(shù)據(jù)操作讀取指定字段的數(shù)據(jù)操作 有兩種格式,一是用整數(shù)指定字段的索引(索引從1開始),二是用字段名來指定字段。下表列出采用“指定字段的索引號”獲取各種類型的字段值的方法。方法名稱方法說明boolean getBoolean(int ColumnIndex)返回指定字段的以Java的booelan類型表示的字段值String getString(int ColumnIndex)返回指定字段的

24、以Java的String類型表示的字段值byte getByte(int ColumnIndex)返回指定字段的以Java的byte類型表示的字段值short getShort(int ColumnIndex)返回指定字段的以Java的short類型表示的字段值int getInt(int ColumnIndex)返回指定字段的以Java的int類型表示的字段值long getLong(int ColumnIndex)返回指定字段的以Java的long類型表示的字段值float getFloat(int ColumnIndex)返回指定字段的以Java的float類型表示的字段值double

25、getDouble(int ColumnIndex)返回指定字段的以Java的Double類型表示的字段值byte getBytes(int ColumnIndex)返回指定字段的以Java的字節(jié)數(shù)組類型表示的字段值Date getDate(int ColumnIndex)返回指定字段的以Java.sql.Date的Date類型表示的字段值3修改指定字段的數(shù)據(jù)操作修改指定字段的數(shù)據(jù)操作 移到指定的數(shù)據(jù)行后,可使用updateXxx()方法設置字段新的數(shù)值,其中“Xxx”指的是Java的數(shù)據(jù)類型。方法的參數(shù)也有兩種格式,一是用整數(shù)指定字段的索引(索引從1開始),二是用字段名來指定字段。格式: u

26、pdateXxx(字段名或字段序號,新數(shù)值)例如: 對數(shù)據(jù)表stu,其中的字段是xh(學號,字符串),name(姓名,字符串),cj(成績,整型),并且查詢結果集為rs,則對數(shù)據(jù)表stu當前記錄中成績改為90,則需要執(zhí)行:String sql=select xh,name,cj from stu;RrsultSet rs=stmt.executeQuery(sql); rs.updateInt(3,90); /或rs.updateInt(cj,90);4.2.6 釋放資源 當完成對數(shù)據(jù)庫記錄的一次操作后,應及時關閉這些對象并釋放資源。 假設建立的對象依次為:連接對象為conn(Connecti

27、on conn),操作對象為pstmt (PreparedStatement pstmt),得到的查詢結果集對象為rs(RrsultSet rs),則需要依次關閉的對象是:rs.close();stmt.close();con.close();4.2.7 數(shù)據(jù)庫亂碼解決方案 在實現(xiàn)對數(shù)據(jù)庫操作時,對于漢字信息,有時不能正確處理,其原因是由于漢字編碼的不同所造成的。為了正確處理漢字信息,必須使?jié)h字編碼使用統(tǒng)一的編碼格式。漢字編碼,目前主要使用UTF-8和GB2312。本教材中統(tǒng)一使用UTF-8編碼。在設計Web應用程序時,涉及到漢字信息編碼的組件主要有: (1)數(shù)據(jù)庫和數(shù)據(jù)表建立時,所建立的數(shù)據(jù)

28、庫和數(shù)據(jù)表及其各字段的編碼格式。(2)對數(shù)據(jù)庫中記錄的讀寫訪問所采用的編碼格式。(3)在JSP頁面之間傳遞參數(shù)(request對象)時,其漢字編碼格式。(4)在JSP頁面(HTML頁面)本身中漢字編碼格式。(5)由服務器響應(response),返回到客戶端的信息編碼格式。 在所設計應用程序時,需要將這幾部分的編碼格式統(tǒng)一為一種漢字編碼方式,就可以解決漢字亂碼問題。4.3 綜合案例 學生身體體質信息管理系統(tǒng)的開發(fā)【案例說明】描述一個學生身體體質的信息有:有id(序號,整型),name(姓名,字符串),sex(性別,字符串),age(年齡,整型),weight(體重,實型),hight(身高,實

29、型)。存放學生體質信息的數(shù)據(jù)庫為students,數(shù)據(jù)表為stu_info。要求,利用JDBC技術實現(xiàn)對學生身體體質信息的管理。 該問題是一個簡單的數(shù)據(jù)庫信息管理系統(tǒng),基本操作主要有:數(shù)據(jù)庫和數(shù)據(jù)表的建立;數(shù)據(jù)庫記錄信息的添加(插入);數(shù)據(jù)庫記錄信息的查詢;數(shù)據(jù)庫記錄信息的刪除;數(shù)據(jù)庫記錄信息的修改。1.功能劃分功能劃分 整個系統(tǒng)的業(yè)務邏輯,可以分為4個功能模塊:(1)添加記錄模塊:完成向數(shù)據(jù)庫添加新記錄。(2)查詢記錄模塊:完成將數(shù)據(jù)庫的記錄以網(wǎng)頁的方式顯示出來,一般需要采用有條件的查詢。(3)修改記錄模塊:完成對指定條件的數(shù)據(jù)庫記錄實現(xiàn)修改。(4)刪除記錄模塊:完成對指定條件記錄從數(shù)據(jù)庫中

30、刪除。2每個模塊的操作流程每個模塊的操作流程 對數(shù)據(jù)庫記錄的每種操作,需要的操作步驟是:(1)注冊驅動,并建立數(shù)據(jù)庫的連接;(2)創(chuàng)建執(zhí)行SQL的語句;(3)執(zhí)行語句;(4)處理執(zhí)行結果;(5)釋放資源; 下面按各功能模塊和實現(xiàn)操作步驟,分別給出其設計思想和設計過程。設計過程:4.3.1 數(shù)據(jù)庫和數(shù)據(jù)表的建立4.3.2 注冊驅動并建立數(shù)據(jù)庫的連接4.3.3 添加記錄模塊的設計與實現(xiàn)4.3.4 查詢記錄模塊的設計與實現(xiàn)4.3.5 修改記錄模塊的設計與實現(xiàn)4.3.6 刪除記錄模塊的設計與實現(xiàn)4.3.7 數(shù)據(jù)庫操作的模板4.3.8 整合各設計模塊形成完整的應用系統(tǒng)4.3.9 問題與思考4.3.1 數(shù)

31、據(jù)庫和數(shù)據(jù)表的建立 該系統(tǒng)需要創(chuàng)建一個數(shù)據(jù)庫以及該庫中的一個數(shù)據(jù)表在MySQL中創(chuàng)建一個數(shù)據(jù)庫:students,并在數(shù)據(jù)庫students中創(chuàng)建表students_info。字段中文描述數(shù)據(jù)類型是否為空id學生學號int否name學生名字Varchar(20)是sex性別Varchar(4)是age年齡int是weight體重double是hight身高double是數(shù)據(jù)庫和數(shù)據(jù)表的建立代碼4.3.2 注冊驅動并建立數(shù)據(jù)庫的連接 對數(shù)據(jù)庫進行查詢、添加、刪除、修改等操作時,都必須通過JDBC建立應用程序與數(shù)據(jù)庫的連接,在本小節(jié)中給出實現(xiàn)“注冊驅動并建立數(shù)據(jù)庫的連接”的公共代碼。 連接數(shù)據(jù)庫時

32、,一般需要指定數(shù)據(jù)庫讀寫的編碼,這里采用“UTF-8”編碼。 實現(xiàn)注冊驅動并建立數(shù)據(jù)庫的連接的關鍵代碼段。4.3.3 添加記錄模塊的設計與實現(xiàn)【例4-1】利用PreparedStatement對象實現(xiàn)在數(shù)據(jù)庫中插入一條記錄。其相應的記錄信息是:序號、姓名、性別、年齡、體重、身高,分別為:16、“張三”、“男”、20、70.0、175。【分析】使用PreparedStatement對象向數(shù)據(jù)庫中插入(添加)記錄,其處理步驟:(1)建立數(shù)據(jù)庫的連接。(2)形成SQL語句(可以帶參數(shù),也可以不帶參數(shù))。(3)利用連接對象建立PreparedStatement對象。(4)若是帶參數(shù)的SQL執(zhí)行語句,則

33、需要對各參數(shù)設置相應的參數(shù)值。(5)調用PreparedStatement對象,執(zhí)行executeUpdate()方法。(6)根據(jù)executeUpdate()方法返回的整數(shù),判定是否執(zhí)行成功,如果大于0表示成功,否則執(zhí)行失敗。(7)關閉所有資源?!驹O計與實現(xiàn)】源代碼 【運行】 程序運行 【例4-2】設計程序,實現(xiàn)利用提交頁面提交要添加的學生信息。然后進入添加處理程序實現(xiàn)將信息添加到數(shù)據(jù)庫。【分析分析】需要兩個JSP程序,程序insert_stu_2_tijiao.jsp將提交信息存放到request對象中,而程序insert_stu_2.jsp從request對象中獲取數(shù)據(jù),形成插入記錄的S

34、QL語句,并實現(xiàn)插入。request對象insert_stu_2.jspinsert_stu_2_tijiao.jsp【設計關鍵】【設計關鍵】(1)該例題有兩個組件,其關鍵是實現(xiàn)這兩個組件之間的數(shù)據(jù)共享,即,使用request對象實現(xiàn)兩個頁面信息的共享,分別使用了id,name,sex,age,weight,hight等變量。(2)在添加處理頁面,設置查詢參數(shù)值時,必須注意各字段的數(shù)據(jù)類型,不同的類型采用不同的設置方法?!緦崿F(xiàn)】(1)提交頁面程序insert_stu_2_tijiao.jsp (2)插入記錄程序insert_stu_2.jsp【運行】 程序運行 4.3.4 查詢記錄模塊的設計與

35、實現(xiàn)【例4-3】采用PreparedStatement的對象實現(xiàn)記錄的查詢操作,要求查詢表stu_info中的所有學生信息并顯示在網(wǎng)頁上?!痉治觥渴褂肞reparedStatement對象實現(xiàn)數(shù)據(jù)庫查詢,其處理步驟:(1)建立數(shù)據(jù)庫的連接。(2)形成查詢SQL語句(可以帶參數(shù),也可以不帶參數(shù)。)(3)利用連接對象建立PreparedStatement對象。(4)若是帶參數(shù)的SQL執(zhí)行語句,則需要對各參數(shù)設置相應的參數(shù)值(若SQL語句不帶參數(shù),該步可以?。#?)再調用PreparedStatement對象的executeQuery()方法,并返回ResultSet對象。(6)對所得到的Resu

36、ltSet對象中的各記錄依次進行處理。(7)關閉所有資源?!驹O計關鍵】該題目要求是顯示出所有的記錄,對于查詢SQL語句不需要參數(shù),其查詢語句為:String sql=select * from stu_info 另外,對于獲得的查詢結果集ResultSet中每條記錄的處理方式,在本例中采用HTML的表格標簽實現(xiàn)數(shù)據(jù)的顯示?!緦崿F(xiàn)】源代碼【運行】 程序運行 【例4-4】采用PreparedStatement的對象實現(xiàn)有條件的查詢操作,要求在表stu_info中,查詢出體重介于60至80之間的所有同學并在網(wǎng)頁上顯示?!痉治觥科涮幚聿襟E與例4-3的處理步驟一樣,這里采用帶參數(shù)的查詢SQL語句?!驹O計

37、關鍵】該例題的設計關鍵是查詢SQL語句的形成,即:String sql=select * from stu_info where weight=? and weight=60 and weight=?;另外,對于該題目,其條件是固定的,其參數(shù)值的設置是:pstmt.setFloat(1,80);【實現(xiàn)】源代碼【運行】 程序運行 【例4-9】對數(shù)據(jù)庫students中的數(shù)據(jù)表stu_info,刪除滿足條件(由提交頁面提供)的所有記錄。【分析】該例題要2個組件,一個是delete_stu_2_tijiao.jsp,實現(xiàn)條件的提交;第二個是delete_stu_2.jsp,刪除滿足條件的所有記錄。r

38、equest對象delete_stu_2.jspdelete_stu_2_tijiao.jsp【設計關鍵】(1)該例題需要在2個頁面之間共享信息,需要使用JSP內置對象request實現(xiàn)共享。為了簡化設計,按“姓名”、“性別”、“體重范圍段”設置查詢條件。(2)在提交頁面,提交信息可以是“空值”,表示該字段不受限制。(3)在查詢處理頁面,設置查詢參數(shù)值時,必須注意各字段的數(shù)據(jù)類型?!緦崿F(xiàn)】 (1)delete_stu_2_tijiao.jsp,實現(xiàn)條件的提交; (2)delete_stu_2.jsp,刪除滿足條件的所有記錄【運行】程序運行4.3.7 數(shù)據(jù)庫操作的模板“數(shù)據(jù)庫操作的模板”代碼。實

39、現(xiàn)數(shù)據(jù)庫的添加、查詢、修改、刪除操作。由于實現(xiàn)數(shù)據(jù)庫操作,存在數(shù)據(jù)庫連接等各種異常,通常需要異常處理,其數(shù)據(jù)庫操作的通用結構。4.3.8 整合各設計模塊形成完整的應用系統(tǒng) 系統(tǒng)的應用界面如圖4-10所示。頁面的左部分是操作功能菜單選項,當單擊某選項時,會相應的執(zhí)行該選項的功能,圖4-10所示是選擇“按條件修改學生”后所顯示的網(wǎng)頁界面。功能模塊劃分:1.列出全部學生模塊:該功能模塊在【例4-3】中已實現(xiàn),其程序為find_stu_1.jsp。2.按條件查詢學生模塊:該功能模塊在【例4-5】中已實現(xiàn),其程序為find_stu_3_tijiao.jsp和find_stu_3.jsp。3新添加學生模塊

40、:該功能模塊在【例4-2】中已實現(xiàn),其程序為insert_stu_2_tijiao.jsp和insert_stu_2.jsp。4按條件刪除學生模塊:該功能模塊在【例4-9】中已實現(xiàn),其程序為delete_stu_2_tijiao.jsp和delete_stu_2.jsp。5按條件修改學生模塊:該功能模塊在【例4-7】中已實現(xiàn),其程序為update_stu_2_tijiao.jsp、update_stu_2_edit.jsp、update_stu_2.jsp。6主頁面框架的設計 該應用系統(tǒng)的主頁面框架如圖4-10所示,由3部分組成: 最上方的顯示標題部分(index_title.jap), 左邊

41、的顯示操作菜單的顯示(index_stu_left.jsp), 右邊顯示運行界面部分(index_stu_right.jsp), 另外,由這3部分組合形成主頁面的程序(index_stu.jsp)。設計過程與源代碼設計過程與源代碼運行程序運行程序4.4 數(shù)據(jù)源與連接池技術 使用連接池技術連接數(shù)據(jù)庫需要兩步處理:首先配置數(shù)據(jù)源,然后在程序中通過連接池建立數(shù)據(jù)庫的連接,從而再訪問數(shù)據(jù)庫。本節(jié)主要內容:4.4.1 配置數(shù)據(jù)源4.4.2 使用連接池技術訪問數(shù)據(jù)庫處理步驟4.4.3 連接池應用 學生身體體質信息顯示模塊的設計與實現(xiàn)4.4.4 問題與思考4.4.1 配置數(shù)據(jù)源 在通過連接池技術訪問數(shù)據(jù)庫時

42、,首先需要Web服務器下配置數(shù)據(jù)庫連接池。 下面以MySQL數(shù)據(jù)庫為例介紹在服務器Tomcat下配置數(shù)據(jù)庫連接池的方法。1在服務器上添加在服務器上添加MySQL數(shù)據(jù)庫驅動程序數(shù)據(jù)庫驅動程序 將MySQL數(shù)據(jù)庫的驅動程序復制到Tomcat安裝路徑下的commonlib文件夾中。2數(shù)據(jù)源參數(shù)配置數(shù)據(jù)源參數(shù)配置 在Web工程目錄下的META-INFcontext.xml文件中,若在Web工程目錄下META-INF不存在context.xml文件,則需要自己建立該文件。配置數(shù)據(jù)源的具體代碼如下: 配置數(shù)據(jù)源時需要配置的元素的屬性及其說明屬性名稱說 明name設置數(shù)據(jù)源的JNDI名type設置數(shù)據(jù)源的類型auth設置數(shù)據(jù)源的管理者,有兩個可選值Container和Application,Container表示由容器來創(chuàng)建和管理數(shù)據(jù)源,Application表示由Web應用來創(chuàng)建和管理數(shù)據(jù)源dri

溫馨提示

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

評論

0/150

提交評論