JSP與JDBC建立網(wǎng)頁(yè)庫(kù)課件_第1頁(yè)
JSP與JDBC建立網(wǎng)頁(yè)庫(kù)課件_第2頁(yè)
JSP與JDBC建立網(wǎng)頁(yè)庫(kù)課件_第3頁(yè)
JSP與JDBC建立網(wǎng)頁(yè)庫(kù)課件_第4頁(yè)
JSP與JDBC建立網(wǎng)頁(yè)庫(kù)課件_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第11章 JSP與JDBC建立網(wǎng)頁(yè)資料庫(kù)11-1 JDBC的基礎(chǔ)11-2 建立MySQL的資料庫(kù)連結(jié)11-3 建立Access的資料庫(kù)連結(jié)11-4 JSP的資料庫(kù)基本存取11-5 SQL語(yǔ)言的資料庫(kù)查詢(xún)11-6 SQL語(yǔ)言的資料庫(kù)操作11-7 JNDI與連結(jié)池11-8 JSTL的資料庫(kù)存取標(biāo)籤庫(kù)第11章 JSP與JDBC建立網(wǎng)頁(yè)資料庫(kù)11-1 JDBC的11-1 JDBC的基礎(chǔ)-說(shuō)明昇陽(yáng)公司提出的資料庫(kù)中介軟體(Middleware)稱(chēng)為JDBC(Java Database Connectivity),這是一種開(kāi)放標(biāo)準(zhǔn)的Java程式介面,可以讓Java程式連接資料庫(kù)管理系統(tǒng),以Java技術(shù)來(lái)說(shuō)

2、,就是實(shí)作JDBC驅(qū)動(dòng)程式介面(JDBC Driver Interface)的類(lèi)別,即JDBC AP即JDBC API。11-1 JDBC的基礎(chǔ)-說(shuō)明昇陽(yáng)公司提出的資料庫(kù)中介軟體(11-1 JDBC的基礎(chǔ)-圖例11-1 JDBC的基礎(chǔ)-圖例11-1 JDBC的基礎(chǔ)-驅(qū)動(dòng)程式種類(lèi)JDBC-ODBC橋接驅(qū)動(dòng)程式(JDBC-ODBC Bridge):Java程式不是直接連接資料庫(kù)管理系統(tǒng),而是透過(guò)微軟ODBC的中介軟體來(lái)存取資料庫(kù)。原生API的Java驅(qū)動(dòng)程式(A Native-API Partly Java Driver):將Java程式的JDBC呼叫轉(zhuǎn)換成專(zhuān)屬資料庫(kù)管理系統(tǒng)的原生API呼叫。Ja

3、va網(wǎng)路協(xié)定驅(qū)動(dòng)程式(A Net-protocol All Java Driver):將Java程式的JDBC呼叫轉(zhuǎn)換成資料庫(kù)管理系統(tǒng)專(zhuān)屬的網(wǎng)路協(xié)定,再由伺服器轉(zhuǎn)換成資料庫(kù)管理系統(tǒng)的API呼叫。Java原生通訊協(xié)定驅(qū)動(dòng)程式(A Native-protocol All Java Driver):將Java程式的JDBC呼叫直接轉(zhuǎn)換成資料庫(kù)管理系統(tǒng)原生通訊協(xié)定的API呼叫,以便客戶(hù)端直接連線資料庫(kù)伺服器。11-1 JDBC的基礎(chǔ)-驅(qū)動(dòng)程式種類(lèi)JDBC-ODBC橋接11-2 建立MySQL的資料庫(kù)連結(jié)11-2-1 安裝MySQL的JDBC驅(qū)動(dòng)程式11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)11-2

4、 建立MySQL的資料庫(kù)連結(jié)11-2-1 安裝MyS11-2-1 安裝MySQL的JDBC驅(qū)動(dòng)程式MySQL資料庫(kù)系統(tǒng)支援JDBC的Java原生通訊協(xié)定驅(qū)動(dòng)程式,稱(chēng)為MySQL Connector/J,我們可以在MySQL網(wǎng)站免費(fèi)下載,目前版本是3.0版,在JSP的Web應(yīng)用程式安裝MySQL Connector/J,其步驟如下所示:1. 使用解壓縮工具從壓縮檔取出JAR檔案:mysql-connector-java-3.0.16-ga-bin.jar。2. 將JAR檔案複製Web應(yīng)用程式的WEB-INFlib資料夾,以本章的Ch11應(yīng)用程式為例,其完整路徑為C:InetpubwwwrootC

5、h11WEB-INFlib。11-2-1 安裝MySQL的JDBC驅(qū)動(dòng)程式MySQL資料11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-說(shuō)明在安裝好MySQL的JDBC驅(qū)動(dòng)程式後,JSP程式就可以使用JDBC建立資料庫(kù)連結(jié),然後透過(guò)JDBC API執(zhí)行SQL指令來(lái)存取資料庫(kù)的記錄資料。11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-說(shuō)明在安裝好11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-步驟一步驟一:載入驅(qū)動(dòng)程式在JSP程式首先需要載入JDBC驅(qū)動(dòng)程式,如下所示:String sDriver = com.mysql.jdbc.Driver;Class.forName(sDriver);上述

6、程式碼的字串sDriver是驅(qū)動(dòng)程式名稱(chēng)com.mysql.jdbc.Driver,接著使用Class類(lèi)別方法forName()方法載入驅(qū)動(dòng)程式。11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-步驟一步驟一11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-步驟二步驟二:建立Connection連結(jié)物件在載入JDBC驅(qū)動(dòng)程式後,就可以使用DriverManager類(lèi)別的getConnection()類(lèi)別方法建立Connection物件dbCon,如下所示:sCon = jdbc:mysql:/localhost:3306/school?user=root&password=123456;dbCon

7、=DriverManager.getConnection(sCon);11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-步驟二步驟二11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-步驟三步驟三:建立JDBC的Statement物件Statement物件的目的是執(zhí)行SQL指令,在建立好Connection物件後,就可以使用createStatement()方法建立Statement物件,如下所示:stmt = dbCon.createStatement();11-2-2 使用JDBC連結(jié)MySQL資料庫(kù)-步驟三步驟三11-3 建立Access的資料庫(kù)連結(jié)11-3-1 JDBC-ODBC資料庫(kù)連結(jié)的

8、基礎(chǔ)11-3-2 建立資料庫(kù)與系統(tǒng)資料來(lái)源11-3-3 使用JDBC-ODBC連結(jié)Access資料庫(kù)11-3 建立Access的資料庫(kù)連結(jié)11-3-1 JDBC11-3-1 JDBC-ODBC資料庫(kù)連結(jié)的基礎(chǔ)-說(shuō)明Access並不支援JDBC驅(qū)動(dòng)程式。所以JSP程式需要使用JDBC的JDBC-ODBC橋接驅(qū)動(dòng)程式,透過(guò)JDBC-ODBC驅(qū)動(dòng)程式存取ODBC資料來(lái)源的Access資料庫(kù)。ODBC(Object Database Connectivity)是微軟開(kāi)發(fā)的中介軟體,提供Windows作業(yè)系統(tǒng)的應(yīng)用程式一種標(biāo)準(zhǔn)的資料庫(kù)存取方式,能夠存取位在其它電腦上執(zhí)行的資料庫(kù)系統(tǒng)。11-3-1 JDB

9、C-ODBC資料庫(kù)連結(jié)的基礎(chǔ)-說(shuō)明Acc11-3-1 JDBC-ODBC資料庫(kù)連結(jié)的基礎(chǔ)-圖例11-3-1 JDBC-ODBC資料庫(kù)連結(jié)的基礎(chǔ)-圖例11-3-2 建立資料庫(kù)與系統(tǒng)資料來(lái)源-建立Access資料庫(kù)Access資料庫(kù)是學(xué)校資料庫(kù)School.mdb,在School.mdb資料庫(kù)擁有Students資料表,其欄位說(shuō)明,如下表所示:11-3-2 建立資料庫(kù)與系統(tǒng)資料來(lái)源-建立Access資料11-3-2 建立資料庫(kù)與系統(tǒng)資料來(lái)源-新增ODBC系統(tǒng)資料來(lái)源在Access建立好資料庫(kù)後,就可以在Windows作業(yè)系統(tǒng)建立ODBC系統(tǒng)資料來(lái)源,筆者準(zhǔn)備在Windows XP作業(yè)系統(tǒng)的電腦新增

10、Access資料庫(kù)School.mdb名為【school_db】的ODBC系統(tǒng)資料來(lái)源,如右圖所示:11-3-2 建立資料庫(kù)與系統(tǒng)資料來(lái)源-新增ODBC系統(tǒng)資料11-3-3 使用JDBC-ODBC連結(jié)Access資料庫(kù)-載入驅(qū)動(dòng)程式載入JDBC-ODBC驅(qū)動(dòng)程式在JSP程式載入的驅(qū)動(dòng)程式是透過(guò)ODBC存取資料庫(kù),所以載入JDBC-ODBC驅(qū)動(dòng)程式,如下所示:String sDriver = sun.jdbc.odbc.JdbcOdbcDriver;Class.forName(sDriver);上述程式碼的字串sDriver是驅(qū)動(dòng)程式名稱(chēng)sun.jdbc.odbc.JdbcOdbcDriver,

11、接著載入JDBC-ODBC驅(qū)動(dòng)程式。11-3-3 使用JDBC-ODBC連結(jié)Access資料庫(kù)-11-3-3 使用JDBC-ODBC連結(jié)Access資料庫(kù)-JDBC URLJDBC URL位址字串在載入JDBC-ODBC驅(qū)動(dòng)程式後,就可以使用DriverManager類(lèi)別的getConnection()類(lèi)別方法建立Connection物件dbCon,如下所示:String sCon = jdbc:odbc:school_db;dbCon = DriverManager.getConnection(sCon);11-3-3 使用JDBC-ODBC連結(jié)Access資料庫(kù)-11-4 JSP的資料庫(kù)基

12、本存取11-4-1 取得資料表的資訊11-4-2 顯示資料表的記錄資料11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題11-4 JSP的資料庫(kù)基本存取11-4-1 取得資料表的資11-4-1 取得資料表的資訊-步驟四取得資料表資訊是繼續(xù)第11-2-2節(jié)的步驟三。步驟四:使用Statement物件執(zhí)行SQL指令在前面已經(jīng)說(shuō)過(guò),建立Statement物件的目的是執(zhí)行SQL指令,如下所示:String sSQL=SELECT * FROM students;boolean state = stmt.execute(sSQL);11-4-1 取得資料表的資訊-步驟四取得資料表資訊是繼續(xù)第11-

13、4-1 取得資料表的資訊-步驟五步驟五:取得ResultSet和ResultSetMetaData物件在使用Statement物件執(zhí)行SQL指令後,接著可以使用getResultSet()方法取得ResultSet物件,如下所示:ResultSet rs = stmt.getResultSet();上述程式碼在取得ResultSet物件後,再使用getMetaData()方法取得ResultSetMetaData物件,如下所示:ResultSetMetaData md = rs.getMetaData();在取得ResultSetMetaData物件後,就可以使用相關(guān)方法取得資料表的相關(guān)資訊。

14、11-4-1 取得資料表的資訊-步驟五步驟五:取得Resul11-4-1 取得資料表的資訊-方法ResultSetMetaData物件的相關(guān)方法,如下表所示:11-4-1 取得資料表的資訊-方法ResultSetMet11-4-2 顯示資料表的記錄資料-步驟四在這一節(jié)筆者準(zhǔn)備執(zhí)行SQL查詢(xún)指令取得資料表的記錄資料,步驟是繼續(xù)第11-2-2節(jié)的步驟三。步驟四:使用Statement物件執(zhí)行SQL指令在JSP程式執(zhí)行SQL查詢(xún)指令可以取得查詢(xún)結(jié)果的ResultSet物件,這是使用executeQuery()方法取得ResultSet物件,如下所示:rs = stmt.executeQuery(sS

15、QL);程式碼取得參數(shù)SQL指令sSQL查詢(xún)結(jié)果的ResultSet物件rs,參數(shù)的SQL查詢(xún)指令可以取得資料表students的所有記錄。11-4-2 顯示資料表的記錄資料-步驟四在這一節(jié)筆者準(zhǔn)備執(zhí)11-4-2 顯示資料表的記錄資料-步驟五步驟五:使用迴圈取得ResultSet物件的記錄在取得查詢(xún)結(jié)果的ResultSet物件後,可以使用while迴圈配合next()方法來(lái)顯示記錄,如下所示:while ( rs.next() ) out.print(rs.getString(stdno); out.print(rs.getString(name); out.print(rs.getStrin

16、g(address); out.print(rs.getDate(birthday); out.print(rs.getInt(totalcredit);11-4-2 顯示資料表的記錄資料-步驟五步驟五:使用迴圈取11-4-2 顯示資料表的記錄資料-步驟五步驟六:關(guān)閉連結(jié)的Connection和Statement物件在處理完資料庫(kù)的查詢(xún)或操作後,JSP程式需要關(guān)閉Connection和Statement物件,使用的都是close()方法,如下所示:stmt.close();dbCon.close();11-4-2 顯示資料表的記錄資料-步驟五步驟六:關(guān)閉連結(jié)的11-4-3 使用JDBC連結(jié)My

17、SQL資料庫(kù)的中文問(wèn)題-編碼指定JDBC驅(qū)動(dòng)程式的編碼在載入JDBC驅(qū)動(dòng)程式時(shí),JSP程式需要指定編碼參數(shù)來(lái)連結(jié)MySQL資料庫(kù),如下所示:String sCon = jdbc:mysql:/localhost:3306/school?user=root& + password=123456&useUnicode=true&characterEncoding=MS950;dbCon = DriverManager.getConnection(sCon);上述JDBC驅(qū)動(dòng)程式設(shè)定useUnicode和characterEncoding屬性值為true和MS950,使用Unicode的MS950編

18、碼。11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題-編11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題-Unicode字串1將中文欄位值轉(zhuǎn)換成Unicode字串在JSP程式顯示透過(guò)JDBC取得MySQL資料庫(kù)的中文記錄資料時(shí),因?yàn)镴DBC驅(qū)動(dòng)程式在轉(zhuǎn)換中文內(nèi)碼時(shí),一個(gè)中文字會(huì)被切割成2個(gè)字元,例如:0 x4175會(huì)切割成0 x41和0 x75。所以,JSP程式在顯示中文的記錄資料時(shí),需要先將欄位字串還原成完整中文內(nèi)碼的Unicode字串,這就是toUnicode()方法的功能。11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題-U11-4-3 使用JDBC連結(jié)MySQL

19、資料庫(kù)的中文問(wèn)題-Unicode字串2String toUnicode(String s) if (s = null | s.length() = 0) return null; byte buffer = new bytes.length(); int i, j; for (i = 0, j = 0; i = 0 x100 ) char c = (char) s.charAt(i); byte buf = (+c).getBytes(); bufferj+ = (byte) buf0; bufferj+ = (byte) buf1; else bufferj+ = (byte) s.char

20、At(i); return new String(buffer,0,j); 11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題-U11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題-表單資料編碼指定表單傳送資料的編碼當(dāng)SQL指令或欄位值使用表單方式傳遞中文內(nèi)容給JSP程式時(shí),在JSP程式需要指定傳送的編碼方式,如下所示:request.setCharacterEncoding(MS950);上述程式碼使用request物件的setCharacterEncoding()方法指定傳送的編碼方式為MS950,這和JDBC驅(qū)動(dòng)程式的編碼相同,如此JSP程式才能送出正確的SQL指令,將中文欄

21、位內(nèi)容存入資料庫(kù)。11-4-3 使用JDBC連結(jié)MySQL資料庫(kù)的中文問(wèn)題-表11-5 SQL語(yǔ)言的資料庫(kù)查詢(xún)11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果11-5-2 SQL語(yǔ)言的基礎(chǔ)11-5-3 SQL查詢(xún)指令 - SELECT11-5 SQL語(yǔ)言的資料庫(kù)查詢(xún)11-5-1 分頁(yè)顯示SQL11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-建立Statement物件建立分頁(yè)顯示的Statement物件因?yàn)镽esultSet物件的記錄資料需要使用相關(guān)方法來(lái)移動(dòng)記錄指標(biāo),如此才能分頁(yè)顯示查詢(xún)結(jié)果,所以在使用Connection物件的方法建立Statement物件時(shí),需要設(shè)定指標(biāo)型態(tài)和同步等級(jí),如下所示:stmt = d

22、bCon.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-建立Statement11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-移動(dòng)記錄指標(biāo)的方法ResultSet物件移動(dòng)記錄指標(biāo)的相關(guān)方法11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-移動(dòng)記錄指標(biāo)的方法Re11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-分頁(yè)顯示1當(dāng)JSP程式分頁(yè)顯示SQL查詢(xún)結(jié)果時(shí),首先需要計(jì)算出ResultSet物件的記錄總數(shù),如下所示:rs.last();int totalRecords = rs.g

23、etRow();在取得記錄總數(shù)後,即可計(jì)算出這些記錄一共可以分成幾頁(yè)來(lái)顯示,如下所示:totalPages = totalRecords/pageSize; if ( (totalRecords % pageSize) != 0 ) totalPages+; 11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-分頁(yè)顯示1當(dāng)JSP程式11-5-1 分頁(yè)顯示SQL查詢(xún)結(jié)果-分頁(yè)顯示2在計(jì)算出記錄數(shù)和分頁(yè)數(shù)後,只需使用URL參數(shù)傳入顯示的分頁(yè)pageNo,就可以移動(dòng)記錄指標(biāo)到指定分頁(yè)的第1筆記錄,如下所示:rs.absolute(pageNo-1) * pageSize + 1); 在JSP程式顯示分頁(yè)記錄是一個(gè)

24、do/while迴圈,因?yàn)槲覀円呀?jīng)使用absloute()方法移動(dòng)記錄指標(biāo)到分頁(yè)的第1筆記錄,所以可以直接取得欄位值,如下所示:int count = 0;do count+; while ( rs.next() & count 1711-5-3 SQL查詢(xún)指令 SELECT(單一查詢(xún)條11-5-3 SQL查詢(xún)指令 SELECT(單一查詢(xún)條件2)文字的欄位可以使用【LIKE】包含運(yùn)算子配合%萬(wàn)用字元,此時(shí)查詢(xún)的條件子句只需包含的子字串就符合條件,例如:學(xué)號(hào)包含3的子字串,如下所示:SELECT * FROM students WHERE stdno LIKE %3%數(shù)值或日期欄位可以使用、=和

25、 17 ORDER BY totalcredit上述查詢(xún)結(jié)果使用totalcredit欄位排序,預(yù)設(shè)是由小到大的ASC,如果想倒過(guò)來(lái)由大到小,只需加上DESC,如下所示:SELECT * FROM students WHERE totalcredit 17 ORDER BY totalcredit DESC11-5-3 SQL查詢(xún)指令 SELECT(排序輸出)11-6 SQL語(yǔ)言的資料庫(kù)操作11-6-1 在資料表插入、刪除和更新記錄11-6-2 PreparedStatement類(lèi)別執(zhí)行SQL指令11-6 SQL語(yǔ)言的資料庫(kù)操作11-6-1 在資料表插入、11-6-1 在資料表插入、刪除和更新

26、記錄-插入記錄SQL語(yǔ)言插入記錄指令I(lǐng)NSERT可以新增一筆記錄到資料表,INSERT指令的語(yǔ)法格式,如下所示:INSERT INTO table (column1,column2,.) VALUES (value1, value2 , )INSERT指令的注意事項(xiàng),如下所示:不論欄位或值的清單,都需要使用逗號(hào)分隔。INSERT指令VALUES的值,數(shù)值不用單引號(hào)包圍,字元與日期/時(shí)間需要單引號(hào)包圍,Access的日期時(shí)間需要#符號(hào)。INSERT指令的欄位名稱(chēng)清單,並不需要和資料表定義的欄位數(shù)目或順序相同,只需選擇需要新增資料的欄位,但是括號(hào)內(nèi)的欄位名稱(chēng)順序需和VALUES值的順序相同。11-

27、6-1 在資料表插入、刪除和更新記錄-插入記錄SQL語(yǔ)11-6-1 在資料表插入、刪除和更新記錄-更新記錄UPDATE更新記錄指令是將資料表內(nèi)符合條件的記錄,都更新成指定的欄位值,語(yǔ)法如下所示:UPDATE table SET column1 = value1 WHERE conditions如果更新欄位不只一個(gè),請(qǐng)使用逗號(hào)分隔,其語(yǔ)法格式,如下所示:UPDATE table SET column1 = value1 , column2 = value2 WHERE conditionsUPDATE指令的注意事項(xiàng),如下所示:WHERE子句是必要元素,如果沒(méi)有WHERE子句,資料表內(nèi)所有記錄欄位

28、都會(huì)被更新。更新欄位值是數(shù)值不用單引號(hào)包圍,字元與日期/時(shí)間需要單引號(hào)包圍,Access的日期時(shí)間需要#符號(hào)。11-6-1 在資料表插入、刪除和更新記錄-更新記錄UPDA11-6-1 在資料表插入、刪除和更新記錄-刪除記錄SQL語(yǔ)言刪除記錄指令DELETE是將資料表內(nèi)符合條件的記錄通通刪除掉。DELETE指令的語(yǔ)法格式,如下所示:DELETE FROM table WHERE conditions上述指令table是資料表,WHERE子句conditions為刪除記錄的條件,口語(yǔ)來(lái)說(shuō)是將符合conditions條件的記錄刪除掉,DELETE指令的注意事項(xiàng),如下所示:WHERE子句是DELETE

29、指令的必要元素,如果沒(méi)有WHERE子句,資料表內(nèi)的所有記錄都會(huì)被刪除。11-6-1 在資料表插入、刪除和更新記錄-刪除記錄SQL語(yǔ)11-6-2 PreparedStatement類(lèi)別執(zhí)行SQL指令-1PreparedStatement類(lèi)別是Statement類(lèi)別的子介面,PreparedStatement物件可以預(yù)先建立SQL指令字串,並且使用參數(shù)指定欄位值,以避免欄位資料型態(tài)轉(zhuǎn)換的錯(cuò)誤,如下所示:String sSQL=INSERT INTO students + (stdno,name,address,birthday,totalcredit) ;sSQL+=VALUES (?,?,?,#

30、+birthday+#,?);11-6-2 PreparedStatement類(lèi)別執(zhí)行SQ11-6-2 PreparedStatement類(lèi)別執(zhí)行SQL指令-2接著使用prepareStatement()方法建立PreparedStatement物件pstmt,如下所示:PreparedStatement pstmt = dbCon.prepareStatement(sSQL);PreparedStatement物件pstmt的SQL指令參數(shù)需要使用setXXX()方法,這些方法是對(duì)應(yīng)ResultSet類(lèi)別的getXXX()方法,如下所示:pstmt.setString(1, stdno);p

31、stmt.setString(2, name);pstmt.setString(3, address);pstmt.setInt(4, Integer.parseInt(credit);11-6-2 PreparedStatement類(lèi)別執(zhí)行SQ11-7 JNDI與連結(jié)池11-7-1 連結(jié)池與JNDI的基礎(chǔ)11-7-2 在JSP程式使用JNDI與連結(jié)池11-7 JNDI與連結(jié)池11-7-1 連結(jié)池與JNDI的基11-7-1 連結(jié)池與JNDI的基礎(chǔ)-說(shuō)明在JDBC 2.0版定義資料來(lái)源(DataSource)介面,可以讓Java應(yīng)用程式使用此機(jī)制取得資料庫(kù)連結(jié),換句話說(shuō),在JSP程式並不需要撰寫(xiě)

32、建立資料庫(kù)連結(jié)的相關(guān)程式碼,而是從資料來(lái)源取得資料庫(kù)連結(jié),如此,在不修改JSP程式情況下,就可以更改資料來(lái)源連結(jié)的資料庫(kù)。當(dāng)JSP容器實(shí)作JDBC 2.0的資料來(lái)源(DataSource)介面,就可以將資料庫(kù)連結(jié)的管理工作交給JSP容器來(lái)處理,而不用JSP程式自行處理。例如:Resin的JSP容器已經(jīng)實(shí)作JDBC的資料來(lái)源介面,而且支援連結(jié)池(Connection Pool)的功能。11-7-1 連結(jié)池與JNDI的基礎(chǔ)-說(shuō)明在JDBC 2.011-7-1 連結(jié)池與JNDI的基礎(chǔ)-連結(jié)池連結(jié)池(Connection Pool)是在維護(hù)多個(gè)資料庫(kù)連結(jié)的集合,以便重複使用這些資料庫(kù)連結(jié)來(lái)降低使用資料

33、庫(kù)所造成的系統(tǒng)負(fù)擔(dān),因?yàn)镴SP程式建立資料庫(kù)連結(jié)是一種十分浪費(fèi)系統(tǒng)資源的操作,如果重複使用已經(jīng)開(kāi)啟的資料庫(kù)連結(jié),就可以大幅提昇系統(tǒng)效能。連結(jié)池的運(yùn)作是在一開(kāi)始就建立一定數(shù)量的資料庫(kù)連結(jié),如同一個(gè)池塘,當(dāng)JSP程式需要使用資料庫(kù)連結(jié)時(shí),就從池塘中取出沒(méi)用使用的資料庫(kù)連結(jié)給JSP程式使用,在使用完後即歸還連結(jié)池,以便其它JSP程式可以重複使用。11-7-1 連結(jié)池與JNDI的基礎(chǔ)-連結(jié)池連結(jié)池(Conn11-7-1 連結(jié)池與JNDI的基礎(chǔ)-JNDIJNDI (Java Naming and Directory Interface)提供Java應(yīng)用程式所需資源的命名服務(wù)(Naming Service

34、),簡(jiǎn)單的說(shuō),如同Internet的DNS命名服務(wù),使用網(wǎng)域名稱(chēng)即可找到指定的主機(jī)資源。JNDI可以先定義資源的JNDI名稱(chēng),在Java應(yīng)用程式只需使用JNDI名稱(chēng)即可取得所需的資源。11-7-1 連結(jié)池與JNDI的基礎(chǔ)-JNDIJNDI (J11-7-2 在JSP程式使用JNDI與連結(jié)池-定義JNDI的資料來(lái)源與連結(jié)池在web.xml或resin.conf檔案是在或標(biāo)籤下使用子標(biāo)籤來(lái)定義JNDI的資料來(lái)源與連結(jié)池,如下所示: jdbc/mysql com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource jdbc:mysql:/l

35、ocalhost:3306/school root 123456 8 20 30s 11-7-2 在JSP程式使用JNDI與連結(jié)池-定義JNDI11-7-2 在JSP程式使用JNDI與連結(jié)池-取得JNDI定義的資料庫(kù)連結(jié)在JSP程式在JSP程式取得JNDI定義的資料庫(kù)連結(jié)前,需要匯入一些套件,如下所示:JSP程式使用InitialContext物件的lookup()方法找尋JNDI名稱(chēng),其搜尋路徑為java:comp/env,如下所示:Context env=(Context) new InitialContext().lookup(java:comp/env);DataSource ds =

36、 (DataSource) env.lookup(jdbc/mysql);在找到後,即可取得資料庫(kù)連結(jié),如下所示:Connection dbCon = ds.getConnection(); 11-7-2 在JSP程式使用JNDI與連結(jié)池-取得JNDI11-8 JSTL的資料庫(kù)存取標(biāo)籤庫(kù)11-8-1 指定資料來(lái)源標(biāo)籤11-8-2 資料庫(kù)查詢(xún)標(biāo)籤11-8-3 資料庫(kù)更新標(biāo)籤11-8-4 交易處理標(biāo)籤11-8 JSTL的資料庫(kù)存取標(biāo)籤庫(kù)11-8-1 指定資料來(lái)11-8 JSTL的資料庫(kù)存取標(biāo)籤庫(kù)JSTL資料庫(kù)存取標(biāo)籤庫(kù)提供資料庫(kù)查詢(xún)、更新和交易(Transaction)處理標(biāo)籤,在JSP程式請(qǐng)先使用taglib指引元素匯入資料庫(kù)存取標(biāo)籤庫(kù)的URI,如下所示:11

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論