版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章對(duì)數(shù)據(jù)庫的操作本章介紹頁面與數(shù)據(jù)庫之間的通訊.根據(jù)需要,將頁面數(shù)據(jù)保存到數(shù)據(jù)庫中,或者將數(shù)據(jù)庫中的數(shù)據(jù)展現(xiàn)在頁面上,或者執(zhí)行數(shù)據(jù)事務(wù)處理:數(shù)據(jù)查詢和數(shù)據(jù)更新。學(xué)習(xí)目標(biāo)理解數(shù)據(jù)源熟悉創(chuàng)建數(shù)據(jù)源的步驟理解JDBC-ODBC橋接器熟悉數(shù)據(jù)查詢技術(shù)熟悉數(shù)據(jù)更新技術(shù)7.1數(shù)據(jù)源java應(yīng)用程序與數(shù)據(jù)庫的連接方式有四種,本書中采用JDBC-ODBC方式連接數(shù)據(jù)庫.這種連接方式分三個(gè)步驟:首先,創(chuàng)建一個(gè)數(shù)據(jù)源,其次,加載JDBC-ODBC驅(qū)動(dòng)程序,第三步,建立一個(gè)到數(shù)據(jù)庫的連接。數(shù)據(jù)源是對(duì)數(shù)據(jù)庫的一種映射。我們可以把數(shù)據(jù)源理解為數(shù)據(jù)庫本身,一個(gè)數(shù)據(jù)源對(duì)應(yīng)一個(gè)數(shù)據(jù)庫。本書以MicrosoftAccess數(shù)據(jù)庫為例。假設(shè)已創(chuàng)建了數(shù)據(jù)庫db.mdb(保存在E:\db.mdb目錄下)。假設(shè)采用的是windows2000操作系統(tǒng),我們?yōu)樵摂?shù)據(jù)庫創(chuàng)建數(shù)據(jù)源的步驟如下:1.在"管理工具"中選擇"ODBC數(shù)據(jù)源",如圖7-1所示。圖7-1數(shù)據(jù)源ODBC2.雙擊"ODBC數(shù)據(jù)源"圖標(biāo),出現(xiàn)如圖7-2所示界面。該圖顯示了"UserDSN"選項(xiàng)卡中的已有數(shù)據(jù)源的名稱。圖7-2顯示已有user數(shù)據(jù)源3.選擇"SystemDSN"選項(xiàng)卡,單擊"Add"按鈕,增加新的數(shù)據(jù)源,如圖7-3所示。此對(duì)話框,為新增加的數(shù)據(jù)源選擇驅(qū)動(dòng)程序。圖7-3選擇驅(qū)動(dòng)程序4.因?yàn)橐L問MicrosoftAccess數(shù)據(jù)庫,選擇"MicosoftAccessDriver(*.mdb)"選項(xiàng),單擊"完成"按鈕(為數(shù)據(jù)源選擇了驅(qū)動(dòng)程序),出現(xiàn)了設(shè)置數(shù)據(jù)源具體項(xiàng)目的對(duì)話框,如圖7-4所示。圖7-4配置數(shù)據(jù)源5.在"數(shù)據(jù)源名(N)"后的文本框中為數(shù)據(jù)源起一個(gè)名字,這里起的名字是grade(可以起別的名字),點(diǎn)擊"選擇(S)…"按鈕,為數(shù)據(jù)源grade選擇數(shù)據(jù)庫,這里選擇的數(shù)據(jù)庫是E:\db.mdb。配置情況如圖7-5所示。圖7-5配置情況6.最后點(diǎn)擊"確定"按鈕,完成了數(shù)據(jù)源的配置,出現(xiàn)對(duì)話框如圖7-6所示。在該對(duì)話框中,點(diǎn)擊"確定"按鈕,完成數(shù)據(jù)源grade的配置。圖7-6配置完成7.2JDBC-ODBC橋接器JDBC-ODBC橋接器就是把應(yīng)用程序與數(shù)據(jù)源連接起來的驅(qū)動(dòng)程序。因此,創(chuàng)建了數(shù)據(jù)源以后,還要加載JDBC-ODBC橋接器,即加載驅(qū)動(dòng)程序。下面是加載驅(qū)動(dòng)程序的方式:try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}chatch(ClassNotFoundExceptione){}
通過Class類的靜態(tài)方法forName(Stringdriver)加載JDBC-ODBC橋接器。7.3數(shù)據(jù)庫連接創(chuàng)建了數(shù)據(jù)源,加載了驅(qū)動(dòng)程序,應(yīng)用程序還是不能連接到數(shù)據(jù)庫。應(yīng)用程序要訪問數(shù)據(jù)庫,還必須創(chuàng)建一個(gè)到數(shù)據(jù)庫的連接。即創(chuàng)建一個(gè)連接對(duì)象。下面是創(chuàng)建連接對(duì)象的靜態(tài)方法:publicstaticConnectiongetConnection(String
url,Stringuser,Stringpassword)throwsSQLException
假設(shè)數(shù)據(jù)源名是“grade”,用戶登錄系統(tǒng)的帳號(hào)是user/password。下面是獲得連接對(duì)象的方法:
Connectionconn=DriverManager.getConnection(“jdbc:odbc:grade”,user,password);或者Connectionconn=DriverManager.getConnection(“jdbc:odbc:grade”);
getConnection()方法是DriverManager類的一個(gè)靜態(tài)方法。對(duì)于Access數(shù)據(jù)庫連接,可以不要帳號(hào)參數(shù)就能建立連接對(duì)象。7.4數(shù)據(jù)庫事務(wù)處理一般來說,數(shù)據(jù)庫事務(wù)處理分兩種:一種是數(shù)據(jù)查詢,第二種是數(shù)據(jù)更新。數(shù)據(jù)更新包括數(shù)據(jù)插入、修改和刪除。假設(shè)已經(jīng)連接到某數(shù)據(jù)庫,創(chuàng)建的連接對(duì)象是conn。則數(shù)據(jù)查詢和數(shù)據(jù)更新步驟如下。1.數(shù)據(jù)查詢通過以下兩個(gè)步驟,獲得查詢結(jié)果集rs。(1)創(chuàng)建語句對(duì)象Statementstmt=conn.createStatement(inttype,intconcurrency);
(2)獲得查詢結(jié)果集Stringsql="select*fromtablenamewhereexpression";//SQL查詢字符串ResultSet
rs=stmt.executeQuery(sql);//獲得結(jié)果集rs2.數(shù)據(jù)更新通過以下兩個(gè)步驟,實(shí)現(xiàn)數(shù)據(jù)更新。(1).創(chuàng)建語句對(duì)象Statementstmt=conn.createStatement(inttype,intconcurrency);
(2).執(zhí)行更新Stringsql="sqlStatement";//插入或修改或刪除SQL字符串
intnumber=stmt.executeUpdate(sql);//執(zhí)行更新操作說明:在數(shù)據(jù)查詢、數(shù)據(jù)更新事務(wù)中,一般采用無參的createStatement()方法創(chuàng)建語句對(duì)象。如果事務(wù)是隨機(jī)查詢、游動(dòng)查詢和用結(jié)果集更新數(shù)據(jù)庫,則應(yīng)采用createStatement(inttype,intconcurrency)方法創(chuàng)建語句對(duì)象。下面是對(duì)該方法參數(shù)的說明。
type的取值決定滾動(dòng)方式,即結(jié)果集中的游標(biāo)是否能上下滾動(dòng)。取值如下:
ResultSet.TYPE_FORWORD_ONLY
結(jié)果集的游標(biāo)只能向下滾動(dòng)。
ResultSet.TYPE_SCROLL_INSENSITIVE
結(jié)果集的游標(biāo)可以上下移動(dòng),當(dāng)數(shù)據(jù)庫變化時(shí),當(dāng)前結(jié)果集不變。
ResultSet.TYPE_SCROLL_SENSITIVE
返回可滾動(dòng)的結(jié)果集。當(dāng)數(shù)據(jù)庫變化時(shí),當(dāng)前結(jié)果集同步改變。
concurrency的取值決定是否能用結(jié)果集更新數(shù)據(jù)庫。concurrency取值:
ResultSet.CONCUR_READ_ONLY
不能用結(jié)果集更新數(shù)據(jù)庫中的表。
ResultSet.CONCUR_UPDATABLE
能用結(jié)果集更新數(shù)據(jù)庫中的表。我們可以使用同一個(gè)Statement對(duì)象來執(zhí)行查詢和更新操作(修改/添加/刪除),但是,需要注意,用Statement對(duì)象獲取結(jié)果集的操作,必須在用Statement對(duì)象執(zhí)行更新的操作之前,否則,執(zhí)行更新的操作會(huì)破壞Statement對(duì)象獲取的結(jié)果集。7.5數(shù)據(jù)查詢按照查詢的方式不同,將查詢分為順序查詢、游動(dòng)查詢、隨機(jī)查詢、參數(shù)查詢、排序查詢、使用通配符查詢。7.5.1順序查詢這種查詢中,獲得的結(jié)果集(ResultSet對(duì)象)中的游標(biāo)只能一行行地向下移動(dòng)。既不能向上移動(dòng)游標(biāo),
也不能跳行移動(dòng)游標(biāo)。
ResultSet對(duì)象由若干行組成。ResultSet對(duì)象一次只能看到一個(gè)數(shù)據(jù)行,使用next()方法,使游標(biāo)移到下一行記錄。
ResultSet對(duì)象可以用字段索引(第一列是1,第二列是2等等)為參數(shù),獲得對(duì)應(yīng)的字段值(記錄中的數(shù)據(jù)項(xiàng)),如方法getXxx(int
columnIndex);也可以用字段名為參數(shù),獲得對(duì)應(yīng)的字段值(記錄中的數(shù)據(jù)項(xiàng)),如方法getXxx(String
columnName)。ResultSet對(duì)象的常用方法如表7-1所示。表7-1ResultSet類的常用方法返回類型方法名稱booleannext()bytegetByte(int
columnIndex)DategetDate(int
columnIndex)DoublegetDouble(int
columnIndex)FloatgetFloat(int
columnIndex)intgetInt(int
columnIndex)LonggetLong(int
columnIndex)StringgetString(int
columnIndex)bytegetByte(String
columnName)DategetDate(String
columnName)DoublegetDouble(String
columnName)FloatgetFloat(String
columnName)intgetInt(String
columnName)LonggetLong(String
columnName)StringgetString(String
columnName)
[例子7.1]查詢英語成績(jī)及格的學(xué)生。學(xué)生成績(jī)保存在表(students)中,表結(jié)構(gòu)為sudents(number,name,math,english,phics)。在db.mdb庫中創(chuàng)建表students。程序結(jié)構(gòu):程序名:ex7_1.jsp程序算法:
1.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。
2.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。
3.獲取連接對(duì)象:con4.獲取語句對(duì)象:sql5.獲取結(jié)果集對(duì)象:rs6.輸出表頭
7.輸出結(jié)果集(rs)中的所有記錄7.5.2游動(dòng)查詢有時(shí),我們需要在結(jié)果集中前后移動(dòng)游標(biāo),以便獲取某條記錄。這時(shí),我們必須返回一個(gè)可滾動(dòng)的結(jié)果集。為了獲取可滾動(dòng)的結(jié)果集,我們必須使用下述方法先獲得一個(gè)Statement對(duì)象:
Statementstmt=conn.createStatement(inttype,intconcurrency);
通過上述Statement對(duì)象獲得的結(jié)果集是可滾動(dòng)結(jié)果集。可滾動(dòng)結(jié)果集(ResultSet)還可用到的方法如下:
publicbooleanprevious()將游標(biāo)向上移動(dòng),該方法返回boolean型數(shù)據(jù),當(dāng)移動(dòng)結(jié)果集第一行之前時(shí)返回false。publicvoidbeforeFirst()將游標(biāo)移到結(jié)果集的初始位置,即在第一行之前。publicvoidafterLast()將游標(biāo)移到結(jié)果集最后一行之后publicvoidfirst()將游標(biāo)移到結(jié)果集的第一行。publicvoidlast()將游標(biāo)移到結(jié)果集的最后一行。publicboolean
isAfterLast()判斷游標(biāo)是否在最后一行之后。publicboolean
isBeforeFirst()判斷游標(biāo)是否在第一行之前。publicboolean
isFirst()判斷游標(biāo)是否指向結(jié)果集的第一行。publicboolean
isLast()判斷游標(biāo)是否指向結(jié)果集的最后一行。publicint
getRow()得到當(dāng)前游標(biāo)所指向的行號(hào)。行號(hào)從1開始,如果結(jié)果集沒有行,返回0。publicboolean
absolute(introw)將游標(biāo)移到參數(shù)row指定的行號(hào)。說明:如果row取負(fù)值,就是倒數(shù)的行數(shù)。asolute(-1)表示移到最后一行,asolute(-2)表示移到倒數(shù)第二行。當(dāng)移到第一行前面或最后一行的后面時(shí),該方法返回false。[例子7.2]從表(students)的最后一行開始,以逆序方式輸出記錄。然后單獨(dú)輸出物理表中的第5條記錄。問題分析:從題目要求可知,結(jié)果集中的游標(biāo)必須能上下游動(dòng),因此,必須用帶參數(shù)的createStatement(inttype,intconcurrency)方法創(chuàng)建Statement類型的對(duì)象。程序結(jié)構(gòu):程序名:ex7_2.jsp程序算法:1.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。2.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。3.獲取連接對(duì)象:con4.獲取語句對(duì)象:sql5.獲取結(jié)果集對(duì)象:rs6.游標(biāo)移到最后一行7.獲取最后一行的行號(hào)8.輸出記錄數(shù)9.輸出表頭10.將游標(biāo)移動(dòng)到最后一行之后11.逆序輸出輸出結(jié)果集(rs)中的所有記錄(從表的最后一行開始輸出記錄)12.將游標(biāo)移到第5條記錄13.輸出第5條記錄。7.5.3隨機(jī)查詢[例子7.3]從學(xué)生表(students)中隨機(jī)抽取4條記錄,并計(jì)算4條記錄的數(shù)學(xué)成績(jī)的平均值。問題分析:產(chǎn)生1到num之間的隨機(jī)數(shù)計(jì)算公式如下:inti=(int)(Math.random()*num+1);i的值是1到num之間的隨機(jī)數(shù)。在程序中,根據(jù)該隨機(jī)數(shù),把游標(biāo)移到相應(yīng)的行,并輸出該行。程序結(jié)構(gòu):程序名:ex7_3.jsp程序算法:
1.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。2.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。3.獲取連接對(duì)象:con4.獲取語句對(duì)象:sql5.獲取結(jié)果集對(duì)象:rs6.游標(biāo)移到最后一行7.獲取表中記錄總數(shù):number8.向vector中添加number個(gè)Integer型對(duì)象(該對(duì)象保存了表的行號(hào))。9.輸出表頭10.從vector中抽取四個(gè)數(shù)字對(duì)象,以每個(gè)數(shù)字對(duì)象為行號(hào),輸出該行號(hào)對(duì)應(yīng)的記錄。11.求出4條記錄數(shù)學(xué)成績(jī)的平均值,并輸出平均值。7.5.4參數(shù)查詢
[例子7.4]對(duì)學(xué)生表(students)分別按姓名查詢和按成績(jī)查詢。問題分析:由三個(gè)頁面完成此功能。一個(gè)頁面提供查詢輸入界面;一個(gè)頁面按姓名查詢數(shù)據(jù);一個(gè)頁面按成績(jī)查詢數(shù)據(jù)。程序結(jié)構(gòu):
ex7_4.jsp頁面提供查詢條件輸入窗口,按姓名查詢時(shí),其姓名參數(shù)被提交給byname.jsp頁面,按成績(jī)查詢時(shí),其成績(jī)參數(shù)被提交給byscore.jsp頁面。byname.jsp頁面查詢出指定姓名的學(xué)生;byscore.jsp頁面查詢出指定成績(jī)的學(xué)生。三個(gè)頁面的交互關(guān)系如圖7-7所示。ex7_4.jsp頁面byname.jsp頁面byscore.jsp頁面按姓名查詢按分?jǐn)?shù)查詢圖7-7頁面交互關(guān)系程序算法:
ex7_4.jsp:1.創(chuàng)建一個(gè)表單,該表單包含一個(gè)文本框,文 本框用于錄入姓名。2.創(chuàng)建一個(gè)表單,該表單包含四個(gè)文本框,四
個(gè)文本框用于錄入英語成績(jī)和3.?dāng)?shù)學(xué)成績(jī)的查詢范圍。byname.jsp:1.獲取表單中的姓名參數(shù):name2.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。3.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。4.獲取連接對(duì)象:con5.獲取語句對(duì)象:sql6.構(gòu)造SQL語句字符串:condition7.獲取結(jié)果集對(duì)象:rs8.輸出表頭9.輸出結(jié)果集(rs)中的所有記錄byscore.jsp:
1.獲取表單中的英語和數(shù)學(xué)成績(jī)范圍:englishmax/englishmin;mathmax/mathmin2.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。3.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。4.獲取連接對(duì)象:con5.獲取語句對(duì)象:sql6.構(gòu)造SQL語句字符串:condition7.獲取結(jié)果集對(duì)象:rs8.輸出表頭9.輸出結(jié)果集(rs)中的所有記錄7.5.5排序查詢可以在SQL語句中使用orderby子句對(duì)查詢記錄進(jìn)行排序。[例子7.5]對(duì)學(xué)生表(students)分別按姓名、英語成績(jī)、總成績(jī)進(jìn)行排序,輸出成績(jī)。程序結(jié)構(gòu):
ex7_5.jsp頁面將排序方式提交給byorder.jsp頁面;byorder.jsp頁面根據(jù)排序方式,查詢數(shù)據(jù)并輸出。程序算法:
ex7_5.jsp:
創(chuàng)建一個(gè)表單,包含三個(gè)單選按鈕,每個(gè)單選按鈕代表一種排序方式。
byorder.jsp:1.從表單中獲取排序方式,保存到變量name中。2.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。3.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。4.獲取連接對(duì)象:con5.獲取語句對(duì)象:sql6.構(gòu)造SQL語句字符串(condition),該串指定了記錄的排序方式。7.獲取結(jié)果集對(duì)象:rs8.輸出表頭9.輸出結(jié)果集(rs)中的所有記錄7.5.6使用通配符查詢可以用SQL語句操作符"like"進(jìn)行模式匹配。用"%"代替一個(gè)或者多個(gè)字符,用一個(gè)下劃線"_"代替一個(gè)字符。例如,下面的SQL語句查詢姓氏為"王"的記錄。Select*fromstudentswherenamelike‘王%’[例子7.6]按姓氏查詢表(students)。程序結(jié)構(gòu):
ex7_6.jsp頁面將姓氏參數(shù)提交給byname2.jsp頁面;byname2.jsp頁面按姓氏通配符查詢數(shù)據(jù)。兩頁面的交互關(guān)系如圖7-8所示。ex7_6.jsp頁面byname2.jsp頁面查詢圖7-8頁面交互關(guān)系程序算法:
ex7_6.jsp:
創(chuàng)建一個(gè)表單,該表單包含一個(gè)文本框,可在此文本框中錄入姓氏參數(shù)。byname2.jsp1.獲取姓名參數(shù):name2.創(chuàng)建查詢通配字符串:name="%"+name+"%"3.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。4.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。5.獲取連接對(duì)象:con6.獲取語句對(duì)象:sql7.構(gòu)造SQL語句字符串:condition8.獲取結(jié)果集對(duì)象:rs9.輸出表頭10.輸出結(jié)果集(rs)中的所有記錄
7.6數(shù)據(jù)更新數(shù)據(jù)更新操作包括修改數(shù)據(jù)、添加數(shù)據(jù)、刪除數(shù)據(jù)。7.6.1修改數(shù)據(jù)修改數(shù)據(jù)是根據(jù)表中某一關(guān)鍵字,修改滿足某些條件的記錄。[例子7.7]以姓名為關(guān)鍵字,修改表(students)中的某些數(shù)據(jù)。程序結(jié)構(gòu):
ex7_7.jsp頁面將要修改的數(shù)據(jù)提交給newResult.jsp頁面;newResult.jsp頁面執(zhí)行數(shù)據(jù)修改,并將修改后的表數(shù)據(jù)顯示出來。兩頁面的交互關(guān)系如圖7-9所示。程序算法:ex7_7.jsp1.創(chuàng)建表單,該表單包含4個(gè)文本框,分別用于錄入關(guān)鍵字姓名(name),數(shù)學(xué)成績(jī)(math),英語成績(jī)(english),物理成績(jī)(physics)。2.輸出修改前表中的數(shù)據(jù)。ex7_7.jsp頁面newResult.jsp頁面執(zhí)行修改圖7-9頁面交互關(guān)系
newResult.jsp:1.從表單中獲取關(guān)鍵字姓名:name2.從表單中獲取修改后的成績(jī):(newMath/newEnglish/newPhysics)3.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。4.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。5.獲取連接對(duì)象:con6.獲取語句對(duì)象:sql7.構(gòu)造三個(gè)SQL語句字符串:condition1/condition2/condition38.執(zhí)行修改操作9.顯示修改后的表的記錄。7.6.2添加數(shù)據(jù)[例子7.8]向表(students)中添加記錄。程序結(jié)構(gòu):
ex7_8.jsp頁面將錄入的數(shù)據(jù)提交給newDatabase.jsp頁面;newDatabase.jsp頁將數(shù)據(jù)添加到表(students)中,并顯示添加數(shù)據(jù)后表中的記錄。兩個(gè)頁面的交互關(guān)系如圖7-10所示。ex7_8.jsp頁面newDatabase.jsp頁面添加記錄圖7-10頁面交互關(guān)系程序算法:ex7_8.jsp:1.創(chuàng)建一個(gè)表單,包含5個(gè)文本框,分別用于錄入學(xué)號(hào)(number),姓名(name),數(shù)學(xué)(math),英語(english),物理(physics)成績(jī)。
2.輸出添加記錄前表(students)中的記錄。newDatabase.jsp:1.從表單中獲取錄入的數(shù)據(jù)分別保存到以下變量中:number/name/m/e/p。
2.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。3.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。4.獲取連接對(duì)象:con5.獲取語句對(duì)象:sql6.構(gòu)造SQL插入語句字符串:condition。7.執(zhí)行添加操作8.輸出添加記錄后的表中全部數(shù)據(jù)。7.6.3刪除數(shù)據(jù)[例子7.9]以學(xué)號(hào)為關(guān)鍵字,刪除表(students)中的某些數(shù)據(jù)。程序結(jié)構(gòu):
ex7_9.jsp頁面將要?jiǎng)h除的關(guān)鍵字值提交給delete.jsp頁面;delete.jsp頁面根據(jù)關(guān)鍵字的值,刪除表中的相應(yīng)記錄。兩個(gè)頁面的交互關(guān)系如圖7-11所示。ex7_8.jsp頁面delete.jsp頁面刪除記錄圖7-11頁面交互關(guān)系程序算法:ex7_9.jsp:1.創(chuàng)建一個(gè)表單,該表單包含一個(gè)文本框(接受學(xué)號(hào)關(guān)鍵字值的錄入)。2.輸出刪除數(shù)據(jù)前表的數(shù)據(jù)。delete.jsp:1.從表單獲取關(guān)鍵字段學(xué)號(hào)的值:number。2.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。3.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。4.獲取連接對(duì)象:con。5.獲取語句對(duì)象:sql
。6.構(gòu)造SQL刪除語句字符串:deleteALL
。7.執(zhí)行刪除操作。8.輸出刪除記錄后的表數(shù)據(jù)。7.7分頁顯示記錄當(dāng)要顯示的數(shù)據(jù)記錄太多時(shí),必須采用分頁技術(shù)。這里對(duì)數(shù)據(jù)庫表中的記錄進(jìn)行分頁顯示。[例子7.10]分頁顯示表(students)中的數(shù)據(jù)。問題分析:假設(shè)要顯示的總記錄數(shù)為num,每頁顯示記錄數(shù)為pageSize,則總頁數(shù)(pageCount)的計(jì)算公式如下:如果num除以pageSize的余數(shù)大于0,則總頁數(shù)等于num除以pageSize的商加1。如果num除以pageSize的余數(shù)等于0,則總頁數(shù)等于num除以pageSize的商。即pageCount=(num%pageSize)==0?(num/pageSize):(num/pageSize+1)如果準(zhǔn)備顯示第k頁的內(nèi)容,應(yīng)當(dāng)把游標(biāo)移到第(k-1)*pageSize+1條記錄處。程序結(jié)構(gòu):程序名:ex7_10.jsp
程序算法:1.設(shè)置頁面大?。簆ageSize=8(表示每頁8條記錄)。2.創(chuàng)建一個(gè)表單,該表單包含一文本框,在此框中輸入客戶想顯示的記錄的頁碼號(hào)。3.計(jì)算表中記錄總數(shù):numRow。4.計(jì)算分頁后總頁數(shù):pageCount。5.從表單中獲取要顯示記錄的頁碼號(hào):showPage。6.計(jì)算showPage頁的第一條記錄在表中的行號(hào):posion。7.使游標(biāo)指向posion。8.從當(dāng)前游標(biāo)開始,輸出pageSize條記錄。
7.8網(wǎng)上投票[例子7.11]創(chuàng)建一個(gè)網(wǎng)上投票系統(tǒng)。問題分析:首先要?jiǎng)?chuàng)建兩個(gè)表。一個(gè)是ip表,該表用來存放投票人的ip地址,表的結(jié)構(gòu)是ip(ip);一個(gè)是candidate表,該表用來存放候選人名單及候選人得票數(shù),表的結(jié)構(gòu)是candidate(name,count)。該系統(tǒng)由三個(gè)頁面組成。一個(gè)頁面展示投票界面;一個(gè)頁面將客戶投票選擇保存到candidate表中,實(shí)現(xiàn)投票統(tǒng)計(jì);一個(gè)頁面顯示投票結(jié)果。程序結(jié)構(gòu):
ex7_11.jsp頁面將客戶的投票選擇提交給vote.jsp頁面;vote.jsp頁面將客戶的投票選擇保存到candidate表中,并將客戶的ip地址保存到ip表中;showvote.jsp頁面查看投票結(jié)果。三個(gè)頁面的交互關(guān)系如圖7-12所示。ex7_11.jsp頁面vote.jsp頁面showvote.jsp頁面投票查看投票結(jié)果圖7-12頁面交互關(guān)系程序算法:ex7_11.jsp:1.構(gòu)造一個(gè)StringBuffer類型的空對(duì)象:nameList2.分別聲明連接類型,語句類型,結(jié)果集類型的變量:con/sql/rs
。3.加載驅(qū)動(dòng)程序"sun.jdbc.odbc.JdbcOdbcDriver"。4.獲取連接對(duì)象:con5.獲取語句對(duì)象:sql6.獲取結(jié)果集對(duì)象:rs7.把構(gòu)成表單的字符串加入nameList對(duì)象中8.把構(gòu)成表格的字符串加入nameList對(duì)象中(在表單中加入一個(gè)表格)9.把構(gòu)成表頭的字符串加入nameList對(duì)象中(表格的表頭)10.把rs中的name值和單選按鈕分別以字符串的格式加入nameList對(duì)象中11.關(guān)閉連接對(duì)象:con12.將nameList對(duì)象中的字符串輸出,即輸出表單(以表格的方式顯示表單數(shù)據(jù)),該表單為客戶提供投票選擇(從第1到12步,創(chuàng)建第1個(gè)表單)13.創(chuàng)建第2個(gè)表單,該表單查看投票情況vote.jsp:1.聲明一個(gè)類變量,統(tǒng)計(jì)投票的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙江大學(xué)國際教育學(xué)院招聘?jìng)淇碱}庫及完整答案詳解一套
- 2025年中國醫(yī)學(xué)科學(xué)院醫(yī)學(xué)實(shí)驗(yàn)動(dòng)物研究所第三批公開招聘工作人員備考題庫及答案詳解1套
- 2025年楚雄卷煙廠招聘44人正式員工備考題庫及完整答案詳解1套
- 藍(lán)色扁平UI風(fēng)互聯(lián)網(wǎng)行業(yè)活動(dòng)策劃書模板
- 2025年上海民生輪船有限公司招聘?jìng)淇碱}庫及一套參考答案詳解
- 2025年中國安能集團(tuán)第二工程局有限公司招聘?jìng)淇碱}庫完整答案詳解
- 2025年泉州市豐澤區(qū)云山實(shí)驗(yàn)小學(xué)語文頂崗教師招聘?jìng)淇碱}庫有答案詳解
- 2025年山西華冶勘測(cè)工程技術(shù)有限公司公開招聘檢測(cè)專業(yè)人才的備考題庫及答案詳解一套
- 美發(fā)師(初級(jí))題目及答案
- 2025年中國鐵路南昌局集團(tuán)有限公司招聘494人備考題庫及一套完整答案詳解
- 運(yùn)動(dòng)控制系統(tǒng)安裝與調(diào)試(第2版)習(xí)題及答案匯 甄久軍 項(xiàng)目1-5
- 部編版九年級(jí)語文上冊(cè)教科書(課本全冊(cè))課后習(xí)題參考答案
- 二零二五年度個(gè)人住房貸款展期協(xié)議書3篇
- 2024項(xiàng)目建設(shè)工作總結(jié)(31篇)
- 通信工程建設(shè)標(biāo)準(zhǔn)強(qiáng)制性條文匯編(2023版)-定額質(zhì)監(jiān)中心
- 大數(shù)據(jù)與會(huì)計(jì)專業(yè)實(shí)習(xí)報(bào)告?zhèn)€人小結(jié)
- 人工智能原理與方法智慧樹知到期末考試答案章節(jié)答案2024年哈爾濱工程大學(xué)
- DB34-T 4704-2024 托幼機(jī)構(gòu)消毒技術(shù)規(guī)范
- GB/T 10599-2023多繩摩擦式提升機(jī)
- 高速鐵路線路軌道設(shè)備檢查-靜態(tài)檢查
- GB/T 43309-2023玻璃纖維及原料化學(xué)元素的測(cè)定X射線熒光光譜法
評(píng)論
0/150
提交評(píng)論