版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
對(duì)數(shù)據(jù)庫的操作第一頁,共五十七頁,2022年,8月28日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ù)庫。第二頁,共五十七頁,2022年,8月28日本書以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ù)源的步驟如下:第三頁,共五十七頁,2022年,8月28日1.在"管理工具"中選擇"ODBC數(shù)據(jù)源",如圖7-1所示。圖7-1數(shù)據(jù)源ODBC第四頁,共五十七頁,2022年,8月28日2.雙擊"ODBC數(shù)據(jù)源"圖標(biāo),出現(xiàn)如圖7-2所示界面。該圖顯示了"UserDSN"選項(xiàng)卡中的已有數(shù)據(jù)源的名稱。圖7-2顯示已有user數(shù)據(jù)源第五頁,共五十七頁,2022年,8月28日3.選擇"SystemDSN"選項(xiàng)卡,單擊"Add"按鈕,增加新的數(shù)據(jù)源,如圖7-3所示。此對(duì)話框,為新增加的數(shù)據(jù)源選擇驅(qū)動(dòng)程序。圖7-3選擇驅(qū)動(dòng)程序第六頁,共五十七頁,2022年,8月28日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ù)源第七頁,共五十七頁,2022年,8月28日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配置情況第八頁,共五十七頁,2022年,8月28日6.最后點(diǎn)擊"確定"按鈕,完成了數(shù)據(jù)源的配置,出現(xiàn)對(duì)話框如圖7-6所示。在該對(duì)話框中,點(diǎn)擊"確定"按鈕,完成數(shù)據(jù)源grade的配置。圖7-6配置完成第九頁,共五十七頁,2022年,8月28日7.2JDBC-ODBC橋接器JDBC-ODBC橋接器就是把應(yīng)用程序與數(shù)據(jù)源連接起來的驅(qū)動(dòng)程序。因此,創(chuàng)建了數(shù)據(jù)源以后,還要加載JDBC-ODBC橋接器,即加載驅(qū)動(dòng)程序。第十頁,共五十七頁,2022年,8月28日下面是加載驅(qū)動(dòng)程序的方式:try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}chatch(ClassNotFoundExceptione){}
通過Class類的靜態(tài)方法forName(Stringdriver)加載JDBC-ODBC橋接器。第十一頁,共五十七頁,2022年,8月28日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(Stringurl,Stringuser,Stringpassword)throwsSQLException第十二頁,共五十七頁,2022年,8月28日假設(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ì)象。第十三頁,共五十七頁,2022年,8月28日7.4數(shù)據(jù)庫事務(wù)處理一般來說,數(shù)據(jù)庫事務(wù)處理分兩種:一種是數(shù)據(jù)查詢,第二種是數(shù)據(jù)更新。數(shù)據(jù)更新包括數(shù)據(jù)插入、修改和刪除。第十四頁,共五十七頁,2022年,8月28日假設(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查詢字符串ResultSetrs=stmt.executeQuery(sql);//獲得結(jié)果集rs第十五頁,共五十七頁,2022年,8月28日2.數(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í)行更新操作第十六頁,共五十七頁,2022年,8月28日說明:在數(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ù)的說明。第十七頁,共五十七頁,2022年,8月28日
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ù)庫中的表。第十八頁,共五十七頁,2022年,8月28日我們可以使用同一個(gè)Statement對(duì)象來執(zhí)行查詢和更新操作(修改/添加/刪除),但是,需要注意,用Statement對(duì)象獲取結(jié)果集的操作,必須在用Statement對(duì)象執(zhí)行更新的操作之前,否則,執(zhí)行更新的操作會(huì)破壞Statement對(duì)象獲取的結(jié)果集。第十九頁,共五十七頁,2022年,8月28日7.5數(shù)據(jù)查詢按照查詢的方式不同,將查詢分為順序查詢、游動(dòng)查詢、隨機(jī)查詢、參數(shù)查詢、排序查詢、使用通配符查詢。第二十頁,共五十七頁,2022年,8月28日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(intcolumnIndex);也可以用字段名為參數(shù),獲得對(duì)應(yīng)的字段值(記錄中的數(shù)據(jù)項(xiàng)),如方法getXxx(StringcolumnName)。ResultSet對(duì)象的常用方法如表7-1所示。第二十一頁,共五十七頁,2022年,8月28日表7-1ResultSet類的常用方法返回類型方法名稱booleannext()bytegetByte(intcolumnIndex)DategetDate(intcolumnIndex)DoublegetDouble(intcolumnIndex)FloatgetFloat(intcolumnIndex)intgetInt(intcolumnIndex)LonggetLong(intcolumnIndex)StringgetString(intcolumnIndex)第二十二頁,共五十七頁,2022年,8月28日bytegetByte(StringcolumnName)DategetDate(StringcolumnName)DoublegetDouble(StringcolumnName)FloatgetFloat(StringcolumnName)intgetInt(StringcolumnName)LonggetLong(StringcolumnName)StringgetString(StringcolumnName)第二十三頁,共五十七頁,2022年,8月28日
[例子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)中的所有記錄第二十四頁,共五十七頁,2022年,8月28日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é)果集??蓾L動(dòng)結(jié)果集(ResultSet)還可用到的方法如下:
第二十五頁,共五十七頁,2022年,8月28日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é)果集的最后一行。publicbooleanisAfterLast()判斷游標(biāo)是否在最后一行之后。publicbooleanisBeforeFirst()判斷游標(biāo)是否在第一行之前。第二十六頁,共五十七頁,2022年,8月28日publicbooleanisFirst()判斷游標(biāo)是否指向結(jié)果集的第一行。publicbooleanisLast()判斷游標(biāo)是否指向結(jié)果集的最后一行。publicintgetRow()得到當(dāng)前游標(biāo)所指向的行號(hào)。行號(hào)從1開始,如果結(jié)果集沒有行,返回0。publicbooleanabsolute(introw)將游標(biāo)移到參數(shù)row指定的行號(hào)。說明:如果row取負(fù)值,就是倒數(shù)的行數(shù)。asolute(-1)表示移到最后一行,asolute(-2)表示移到倒數(shù)第二行。當(dāng)移到第一行前面或最后一行的后面時(shí),該方法返回false。第二十七頁,共五十七頁,2022年,8月28日[例子7.2]從表(students)的最后一行開始,以逆序方式輸出記錄。然后單獨(dú)輸出物理表中的第5條記錄。問題分析:從題目要求可知,結(jié)果集中的游標(biāo)必須能上下游動(dòng),因此,必須用帶參數(shù)的createStatement(inttype,intconcurrency)方法創(chuàng)建Statement類型的對(duì)象。程序結(jié)構(gòu):程序名:ex7_2.jsp第二十八頁,共五十七頁,2022年,8月28日程序算法: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條記錄。第二十九頁,共五十七頁,2022年,8月28日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第三十頁,共五十七頁,2022年,8月28日程序算法:
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ī)的平均值,并輸出平均值。第三十一頁,共五十七頁,2022年,8月28日參數(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所示。第三十二頁,共五十七頁,2022年,8月28日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ī)的查詢范圍。第三十三頁,共五十七頁,2022年,8月28日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)中的所有記錄第三十四頁,共五十七頁,2022年,8月28日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)中的所有記錄第三十五頁,共五十七頁,2022年,8月28日排序查詢可以在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è)單選按鈕代表一種排序方式。
第三十六頁,共五十七頁,2022年,8月28日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)中的所有記錄第三十七頁,共五十七頁,2022年,8月28日7.5.6使用通配符查詢可以用SQL語句操作符"like"進(jìn)行模式匹配。用"%"代替一個(gè)或者多個(gè)字符,用一個(gè)下劃線"_"代替一個(gè)字符。例如,下面的SQL語句查詢姓氏為"王"的記錄。Select*fromstudentswherenamelike‘王%’第三十八頁,共五十七頁,2022年,8月28日[例子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ù)。第三十九頁,共五十七頁,2022年,8月28日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)中的所有記錄
第四十頁,共五十七頁,2022年,8月28日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所示。第四十一頁,共五十七頁,2022年,8月28日程序算法: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)系第四十二頁,共五十七頁,2022年,8月28日
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.顯示修改后的表的記錄。第四十三頁,共五十七頁,2022年,8月28日添加數(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)系第四十四頁,共五十七頁,2022年,8月28日程序算法: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ù)。第四十五頁,共五十七頁,2022年,8月28日刪除數(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)系第四十六頁,共五十七頁,2022年,8月28日程序算法: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ù)。第四十七頁,共五十七頁,2022年,8月28日7.7分頁顯示記錄當(dāng)要顯示的數(shù)據(jù)記錄太多時(shí),必須采用分頁技術(shù)。這里對(duì)數(shù)據(jù)庫表中的記錄進(jìn)行分頁顯示。第四十八頁,共五十七頁,2022年,8月28日[例子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條記錄處。第四十九頁,共五十七頁,2022年,8月28日程序結(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條記錄。
第五十頁,共五十七頁,2022年,8月28日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é)果。第五十一頁,共五十七頁,2022年,8月28日程序結(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)系第五十二頁,共五十七頁,2022年,8月28日程序算法: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è)表單,該表單查看投票情況第五十三頁,共五十七頁,2022年,8月28日vote.jsp:1.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)市場(chǎng)的政府政策解讀
- 2025年醫(yī)患糾紛和解合同
- 2025年動(dòng)態(tài)設(shè)備租賃合同示范
- 二零二五年度跨境電商平臺(tái)運(yùn)營與派遣公司物流派遣合同4篇
- 二零二五年度教育信息化資源建設(shè)與運(yùn)維合同3篇
- 2025版寧波環(huán)保企業(yè)員工綠色生產(chǎn)責(zé)任勞動(dòng)合同4篇
- 2025年滬科版八年級(jí)地理下冊(cè)階段測(cè)試試卷
- 2025年山東日照機(jī)場(chǎng)建設(shè)投資公司招聘筆試參考題庫含答案解析
- 2025年上海之根文化傳媒有限公司招聘筆試參考題庫含答案解析
- 2025年天津東疆人才服務(wù)有限公司招聘筆試參考題庫含答案解析
- TB 10012-2019 鐵路工程地質(zhì)勘察規(guī)范
- 新蘇教版三年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)(背誦用)
- 鄉(xiāng)鎮(zhèn)風(fēng)控維穩(wěn)應(yīng)急預(yù)案演練
- 腦梗死合并癲癇病人的護(hù)理查房
- 蘇教版四年級(jí)上冊(cè)脫式計(jì)算300題及答案
- 犯罪現(xiàn)場(chǎng)保護(hù)培訓(xùn)課件
- 扣款通知單 采購部
- 電除顫操作流程圖
- 湖北教育出版社三年級(jí)下冊(cè)信息技術(shù)教案
- 設(shè)計(jì)基礎(chǔ)全套教學(xué)課件
- IATF16949包裝方案評(píng)審表
評(píng)論
0/150
提交評(píng)論