使用JS訪問數(shù)據(jù)庫學(xué)習(xí)教材_第1頁
使用JS訪問數(shù)據(jù)庫學(xué)習(xí)教材_第2頁
使用JS訪問數(shù)據(jù)庫學(xué)習(xí)教材_第3頁
使用JS訪問數(shù)據(jù)庫學(xué)習(xí)教材_第4頁
使用JS訪問數(shù)據(jù)庫學(xué)習(xí)教材_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6講使用JSP訪問數(shù)據(jù)庫

學(xué)習(xí)目標(biāo)掌握SQL語句掌握Access數(shù)據(jù)庫的基本操作了解JDBC、ODBC與數(shù)據(jù)源掌握如何通過JSP頁面訪問數(shù)據(jù)庫本章主要內(nèi)容結(jié)構(gòu)化查詢語言SQL使用Access數(shù)據(jù)庫ODBC與JDBC在服務(wù)器端通過JSP訪問數(shù)據(jù)庫在客戶端通過頁面訪問數(shù)據(jù)庫思考與練習(xí)1結(jié)構(gòu)化查詢語言SQL什么是SQLSQL是“StructuredQueryLanguage”結(jié)構(gòu)化查詢語言的縮寫,SQL是用于對存放在計(jì)算機(jī)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行組織、管理和檢索的一種工具;SQL是針對一種特定類型的數(shù)據(jù)庫――關(guān)系數(shù)據(jù)庫使用的??刂脐P(guān)系數(shù)據(jù)庫的計(jì)算機(jī)程序稱為DBMS--數(shù)據(jù)庫管理系統(tǒng)。SQL是目前使用最廣的、標(biāo)準(zhǔn)的數(shù)據(jù)庫語言。SQL語言使得在數(shù)據(jù)庫中存取或更新信息變得十分容易。1.1select查詢語句1.使用select語句查詢數(shù)據(jù)查詢是SQL語言的核心,而用于表達(dá)SQL查詢的select語句則是功能最強(qiáng)也是最為復(fù)雜的SQL語句,它從數(shù)據(jù)庫中檢索數(shù)據(jù),并將查詢結(jié)果提供給用戶

下面通過具體例子說明select語句的使用方式。首先建立一個名為DB的簡單數(shù)據(jù)庫,該庫中存放一個叫S的用戶情況表,如下表所示

在表中有六列即六個字段:姓名(xm)、性別(xb)、工資(gz)、年齡(nl)、電話(dh)、居住地區(qū)(dz),下面看看如何用Select語句對S表中的內(nèi)容進(jìn)行查詢。姓名性別工資年齡電話居住地區(qū)李一男1000211111上海吳二女2000222222北京張三男3000233333成都李四女4000244444廣州王五男5000255555大連趙六女6000266666天津馬七男7000277777鄭州如果要列出S表中所有姓名、性別和工資的內(nèi)容,可用下面的select語句

select姓名,性別,工資froms實(shí)現(xiàn)姓名性別工資李一男1000吳二女2000張三男3000李四女4000王五男5000趙六女6000馬七男7000如果要列出s表中所有男性的姓名、性別和工資的內(nèi)容,可用下面的select語句實(shí)現(xiàn)

select姓名,性別,工資fromswhere性別="男“如果要列出S表中年齡大于和等于24的所有女性的姓名、工資、電話和居住地區(qū),并且按工資排序,可用下面的Select語句:

select姓名,工資,電話formswhere年齡>=24and性別="女"orderby工資知識歸納Select語句的語法格式為:select數(shù)據(jù)項(xiàng)1,數(shù)據(jù)項(xiàng)2,…from表名where條件表達(dá)式orderby排序選項(xiàng)Select語句用來從數(shù)據(jù)庫表中檢索出滿足條件表達(dá)式要求的數(shù)據(jù)項(xiàng)。select子句的構(gòu)成select子句列出所有要求select語句檢索的數(shù)據(jù)表中的內(nèi)容。它放在select語句開始處,指定此查詢要檢索的數(shù)據(jù)表中的內(nèi)容。這些內(nèi)容通常用數(shù)據(jù)項(xiàng)表示,即一組用“,”隔開的多個數(shù)據(jù)項(xiàng)。按照從左到右的順序,每個數(shù)據(jù)項(xiàng)產(chǎn)生一列查詢結(jié)果,知識歸納from子句from子句列出包含所要查詢數(shù)據(jù)的表,它由關(guān)鍵字from后跟一組用逗號分開的表名組成。每個表名都代表一個包括該查詢要檢索數(shù)據(jù)的表。這些表稱為此SQL語句的表源,因?yàn)椴樵兘Y(jié)果都源于它們。Where子句Where子句告訴SQL只查詢某些行中的數(shù)據(jù),這些行用Where說明的搜索條件進(jìn)行描述。orderby子句orderby子句將查詢結(jié)果按一列或多列中的數(shù)據(jù)排序。如果省略此子句,則查詢結(jié)果將是無序的。添加ASC屬性以升序(從小到大)排列,DESC屬性以降序(從大到小)排列。groupby子句groupby子句指定匯總查詢,即不是對每行產(chǎn)生一個查詢結(jié)果,而是將相似的行進(jìn)行分組,再對每組產(chǎn)生一個匯總結(jié)果。having子句having子句告訴SQL只產(chǎn)生有g(shù)roupby得到的某些組的結(jié)果,和where子句一樣,所需要的組也用一個搜索條件來指定。1.2運(yùn)算符與函數(shù)1.關(guān)系運(yùn)算符一般通過關(guān)系運(yùn)算符連接一個值來表示查詢條件。=等于例如字段名=“男”<>不等于<小于例如字段名<70<=小于等于>大于>=大于等于例如字段名>=20

1.2運(yùn)算符與函函數(shù)2.特殊運(yùn)運(yùn)算符In(字字段值列表表)按按列表中的的值查找,,例如字字段名In(“李李明”,““王平”,“張?!薄?,表表示查詢該該字段中包包含“李明明”,“王王平”,““張?!痹谠趦?nèi)的記錄錄。Between初初值and尾值值,例如如字段名名Between1and100,,表示查查詢該字段段中1到100之間間的所有數(shù)數(shù)值。Like““文本本字段的字字符”,例例如文文本字段名名like“計(jì)計(jì)算機(jī)*””,表示查查詢該文本本字段中包包含“計(jì)算算機(jī)”在內(nèi)內(nèi)的所有記記錄。其中,?匹匹配一個字字符*匹匹配零或多多個字符,,用方括號號可描述一一個可匹配配的字符范范圍。1.2運(yùn)算符與函函數(shù)3.邏輯運(yùn)運(yùn)算符not例例如姓姓名not”李李元”,表表示查詢““姓名”字字段中除了了“李元””的記錄。。and例例如年年齡>=24and性別別="女"。or例例如年年齡>=30or姓名=”李元””。4.函數(shù)函數(shù)有很多多,這里僅僅給出幾個個日期函數(shù)數(shù)和合計(jì)函函數(shù)的說明明。(1)日期期函數(shù)DAY(date)——給出出日期數(shù)據(jù)據(jù)中的哪一一天的值,,例如DAY(#92-01-01#)為為1。month(date)———給出出日期數(shù)據(jù)據(jù)中的哪一一月的值。。year(date)———給出日日期數(shù)據(jù)中中的哪一年年的值。Weekday(date)———給出日日期數(shù)據(jù)中中星期幾的的值。houe(date)———給出日日期數(shù)據(jù)中中鐘點(diǎn)的值值date(date)———給出當(dāng)當(dāng)前日期1.2運(yùn)算符與函函數(shù)1.2運(yùn)算符與函函數(shù)(2)合計(jì)計(jì)函數(shù)均值avg(字段名)對指定字段求平均值計(jì)數(shù)count(字段名)統(tǒng)計(jì)滿足條件的記錄個數(shù)count(*)統(tǒng)計(jì)記錄(元組)個數(shù)最小min(字段名)對指定字段求最小值最大max(字段名)對指定字段求最大值求和sum(字段名)對指定字段求和例如,selectcount(ID)fromstudent;用來統(tǒng)計(jì)student表中中按ID匯匯總出的學(xué)學(xué)生人數(shù)。1.3InsertInto添加加語句SQL不僅僅能進(jìn)行數(shù)數(shù)據(jù)庫的查查詢,還可可以添加新新數(shù)據(jù)到數(shù)數(shù)據(jù)庫中。。添加語句的的語法格式式:InsertInto表名名(col1,col2...)Values(value1,value2...)InsertInto添加加語句用來來向一個表表中添加指指定的新數(shù)數(shù)據(jù)例將張張馳作為一一個新的成成員加入表表S中。InsertIntoS(xm,xb,nl,gz,dh,dz)values(‘張馳馳’,’男男’,28,4500,8888,’北京’’)Insert語句句還可以將將多行數(shù)據(jù)據(jù)添加到另另外一個目目標(biāo)表(B)中,在在這種形式式的Insert語句中中,添加的的數(shù)據(jù)值由由查詢語句句指定。添添加的值來來自已經(jīng)存存在的表((A)中。。看下面的的例子。例如果果要把2008年12月30日之前產(chǎn)產(chǎn)生的訂單單編號(Num)、、日期(Date)和數(shù)目(Amount)從從A表拷貝貝到另一個個名為B的的表中去,,可用下面面的語句::InsertintoB(Num,Date,Amount)SelectNum,Date,AmountFromAWhereDate<'30-12-2008'1.4Update更新語語句SQL還可可以對數(shù)據(jù)據(jù)庫中的數(shù)數(shù)據(jù)進(jìn)行修修改和更新新,而且更更改數(shù)據(jù)庫庫內(nèi)容的SQL語語句更簡單單。SQL用update語句句用于更新新表中選定定行的一列列或多列的的值。update語句句的語法格格式:update表名名set字段名名1=value1[,字字段名2=value2]...where條條件update語句句使用value值值更新選定定表中指定定字段的數(shù)數(shù)據(jù)。要更更新的目標(biāo)標(biāo)表在update后定義,,set子子句指定要要更新表中中哪些列并并指定他們們的值。where語句是不不可少的,,它用來指指定需要更更新的行例6.6這是一個簡簡單的update語句,,可將表c中客戶名名為slp的客戶的的信貸值更更新為10萬并將他他的id變變更為99。updatecsetcredit=100000.00,id=99wherename='slp‘例6.7如果要將表表C中客戶戶ID為80,90,100,120客戶的信信貸值更新新為20萬萬,狀態(tài)值值為021,可用下下列語句::updatecsetcredit=200000.00,state=021whereidin(80,90,100,120)SQL處處理Update語句的的過程是逐逐行搜索所所指定的表表,更新滿滿足搜索條條件的記錄錄,跳過不不滿足搜索索條件的記記錄。1.5Delete刪除除語句Delete刪除語語句用來刪刪除數(shù)據(jù)庫庫表或表中中某些行記記錄。Delete刪除語語句語法格格式:Deletefrom表表名Where條條件由于Delete刪刪除語句過過于簡單,,所以造成成的后果是是很嚴(yán)重的的,雖然其其中的Where子子句是任任選的,但但它幾乎總總是存在的的,若將Where子句句從Delete語句中中省略掉,,則被操作作的目標(biāo)表表的所有行行都將被刪刪除。例6.8從表D中刪刪除ID為為99的所所有行的記記錄。DeletefromDWhereID=991.6CreateTable創(chuàng)建表語語句SQL語語言可以分分為兩大部部分:數(shù)據(jù)據(jù)定義語言言和數(shù)據(jù)操操縱語言,,以上介紹紹的是數(shù)據(jù)據(jù)操縱語言言的Select語語句。下下面介紹的的是數(shù)據(jù)定定義語言,,用來創(chuàng)建建和修改數(shù)數(shù)據(jù)庫結(jié)構(gòu)構(gòu)的一種語語句,包括括Create和和Drop語句句。Create語句句的語法格格式:CreateTable表表名(字段名名1數(shù)據(jù)據(jù)類型(notnull),字段段名2數(shù)數(shù)據(jù)類型(notnull),...)Create語句句用來創(chuàng)建建一個給定定字段的表表。例6.9下面的語句句創(chuàng)建一個個具有字段段name字符型30位,amout數(shù)值型型8位,id數(shù)值型型4位的表表B。CreateTableB(namechar(30),amoutNUMBER(8),idNUMBER(4))1.7Droptable刪除除表語句如果不再需需要數(shù)據(jù)庫庫中的某個個表,可用用Droptable語語句將該該表及其所所保存的數(shù)數(shù)據(jù)從數(shù)據(jù)據(jù)庫中刪除除掉。Drop語語句的語法法格式:Droptable表名名Drop語語句用來刪刪除一個完完整的表。。例6.10如果要刪除除表B可使使用下面的的語句。DroptableB2使用用Access數(shù)據(jù)據(jù)庫目前,市面面上的數(shù)據(jù)據(jù)庫產(chǎn)品多多種多樣,,例如Oracle、SqlServer、、MySQL、DB2、Informix、Sybase、Access,從大型型企業(yè)的解解決方案到到中小企業(yè)業(yè)或個人用用戶的小型型應(yīng)用系統(tǒng)統(tǒng),可以滿滿足用戶的的多樣化需需求。Access是微軟軟公司Office辦公套件件中一個極極為重要的的組成部分分,是世界界上最流行行的桌面數(shù)數(shù)據(jù)庫管理理系統(tǒng)。它它提供了大大量的工具具和向?qū)В?,即使沒有有任何編程程經(jīng)驗(yàn),也也可以通過過可視化的的操作來完完成大部分分的數(shù)據(jù)庫庫管理和開開發(fā)工作。。Access的功功能很強(qiáng)大大,可以處處理公司的的客戶訂單單數(shù)據(jù),管管理自己的的個人通訊訊錄,還可可以對大量量科研數(shù)據(jù)據(jù)進(jìn)行記錄錄和處理。。本節(jié)的內(nèi)容容主要介紹紹如何使用用Access數(shù)據(jù)據(jù)庫管理系系統(tǒng)創(chuàng)建數(shù)數(shù)據(jù)庫文件件及保存數(shù)數(shù)據(jù)的表對對象。2.1創(chuàng)創(chuàng)建數(shù)據(jù)據(jù)庫文件1.安裝Access數(shù)據(jù)庫庫管理系統(tǒng)統(tǒng)軟件確認(rèn)當(dāng)前使使用的計(jì)算算機(jī)中已經(jīng)經(jīng)安裝了包包含Access的的MicrosoftOffice程序。如如果沒有安安裝Access數(shù)數(shù)據(jù)庫管理理軟件,需需要先安裝裝Access,可可使用微軟軟Office套件件進(jìn)行安裝裝其方法與與安裝其他他軟件相同同。2.打開Access主窗口口在Windows操操作系統(tǒng)桌桌面上單擊擊“開始”→→“所有程程序”→““MicrosoftOfficeAccess2003”命令,,啟動Access,打開如圖6.1所示示的Access主主窗口圖6.13.查看““開始工作作”對話框框首次打開Access主窗口口時(shí)會同時(shí)時(shí)打開“開開始工作””對話框,,如圖6.1所示。。在對話框框中可以根根據(jù)需要選選擇不同選選項(xiàng),例如如,可在““打開”欄欄單擊“新新建文件””菜單,““開始工作作”對話框框?qū)⑶袚Q為為“新建文文件”對話話框4.創(chuàng)建數(shù)數(shù)據(jù)庫文件件(1)在Access主窗口口“新建文文件”對話話框“新建建”欄中單單擊“空數(shù)數(shù)據(jù)庫”選選項(xiàng),將打打開“文件件新建對話話框”(2)在““文件新建建對話框””中輸入數(shù)數(shù)據(jù)庫文件件名稱questionnaire,,同時(shí)選擇擇文件的保保存路徑,,(3)在““文件新建建對話框””中單擊““創(chuàng)建”按按鈕,在Access主窗口口中將打開開數(shù)據(jù)庫窗窗口,如下下圖所示,,表明已經(jīng)經(jīng)創(chuàng)建了一一個數(shù)據(jù)庫庫文件questionnaire。。questionnaire數(shù)據(jù)庫窗窗口2.2創(chuàng)創(chuàng)建表對對象建立Access數(shù)數(shù)據(jù)庫的主主要工作就就是創(chuàng)建表表對象1.創(chuàng)建調(diào)調(diào)查主題表表questions表結(jié)構(gòu)構(gòu)表對象由表表結(jié)構(gòu)與表表數(shù)據(jù)構(gòu)成成。表結(jié)構(gòu)構(gòu)指表名、、字段名、、數(shù)據(jù)類型型、字段大大小等。創(chuàng)創(chuàng)建表結(jié)構(gòu)構(gòu)后才能在在其中存放放表數(shù)據(jù)。。如同先有有房子后住住人一樣。。創(chuàng)建表結(jié)構(gòu)構(gòu)可以分為為設(shè)計(jì)邏輯表表結(jié)構(gòu)與創(chuàng)創(chuàng)建物理表表結(jié)構(gòu)兩個過程。。設(shè)計(jì)邏輯輯表結(jié)構(gòu)即即定義表名名、字段名名、字段數(shù)數(shù)據(jù)類型與與字段屬性性等,這些些工作一般般在數(shù)據(jù)庫庫設(shè)計(jì)階段段時(shí)完成。。創(chuàng)建物理表表結(jié)構(gòu)即在在計(jì)算機(jī)中中存放的數(shù)數(shù)據(jù)庫文件件中定義表表名、字段段名、字段段數(shù)據(jù)類型型與字段大大小等,其其結(jié)果是為為存放的數(shù)數(shù)據(jù)在計(jì)算算機(jī)中準(zhǔn)備備存儲空間間,下面介介紹的創(chuàng)建建表結(jié)構(gòu)是是指創(chuàng)建物物理表結(jié)構(gòu)構(gòu)。創(chuàng)建物理表表結(jié)構(gòu)的操操作步驟如如下所示。(1)在questionnaire數(shù)據(jù)庫窗窗口“對象象”欄按下下“表”按按鈕,單擊擊數(shù)據(jù)庫窗窗口工具欄欄上的“設(shè)設(shè)計(jì)”按鈕鈕或雙擊““使用設(shè)計(jì)計(jì)器創(chuàng)建表表”創(chuàng)建方方法選項(xiàng),,打開如圖圖所示的表表設(shè)計(jì)視圖圖窗口。(2)單擊擊表設(shè)計(jì)視視圖第1行行“字段名名稱”單元元格,輸入入第1個字字段名稱questionID。(3)在““數(shù)據(jù)類型型”單元格格,單擊其其右邊的向向下箭頭按按鈕,在其其下拉列表表中列出Access的所有有數(shù)據(jù)類型型,選擇““自動編號號”,在““說明”單單元格中輸輸入“主關(guān)關(guān)鍵字”,,如圖6.5所示。。(4)輸入入字段名稱稱question,選擇““數(shù)據(jù)類型型”為“文文本”型,,在“字段段屬性”區(qū)區(qū)“常規(guī)””標(biāo)簽下““字段大小小”欄輸入入255(5)輸入入字段名稱稱Isvisable,選擇擇數(shù)據(jù)類型型為“數(shù)字字”型,在在“字段屬屬性”區(qū)““常規(guī)”標(biāo)標(biāo)簽下“字字段大小””欄選擇““字節(jié)”,,在“默認(rèn)認(rèn)值”欄輸輸入0(6)輸入入字段名稱稱Date,選擇數(shù)數(shù)據(jù)類型為為“日期/時(shí)間”型型,在“字字段屬性””區(qū)“常規(guī)規(guī)”標(biāo)簽下下“格式””欄選擇““常規(guī)日期期”(7)輸入入字段名稱稱IsOpen,選選擇數(shù)據(jù)類類型為“數(shù)數(shù)字”型,,在“字段段屬性”區(qū)區(qū)“常規(guī)””標(biāo)簽下““字段大小小”欄選擇擇“字節(jié)””,在“默默認(rèn)值”欄欄輸入12.定義主主關(guān)鍵字將表中所有有的字段定定義完畢后后,選擇最最右邊的字字段選擇器器按鈕,選選擇QuestionID字字段,然后后單擊主窗窗口工具欄欄的“主鍵鍵”按鈕或或單擊右鍵鍵在彈出菜菜單選擇““主鍵”命命令,將設(shè)設(shè)置該字段段為主關(guān)鍵鍵字。如圖圖所示。設(shè)置主鍵后后,該字段段行選擇器器按鈕上會會出現(xiàn)一個個小鑰匙如果主鍵由由多個字段段組成,可可按住“Ctrl””鍵不放,,然然后單擊字字段選擇器器選中每個個作為主鍵鍵的字段,,再單擊““主鍵”按按鈕,即可可同時(shí)將多多個字段同同時(shí)設(shè)置為為主鍵了。。如果要取消消字段的主主鍵定義,,在選擇主主鍵字段后后單擊“主主鍵”按鈕鈕即可。3.以表名名questions保存調(diào)調(diào)查主題表表對象的表表結(jié)構(gòu)(1)單擊擊工具欄上上的“保存存”按鈕,,會彈出如如圖所示對對話框。(2)單擊擊“是”按按鈕,彈出出“另存存為”對話話框,在““表名稱””框中輸入入questions并單擊擊“確定””按鈕,即即完成表結(jié)結(jié)構(gòu)的創(chuàng)建建工作2.3在表對象中中添加表數(shù)數(shù)據(jù)1.以數(shù)據(jù)據(jù)表視圖打打開表對象象(1)啟動動Access,在在“開始工工作”對話話框“打開開”欄單擊擊已經(jīng)創(chuàng)建建的數(shù)據(jù)庫庫questionnaire,再次次打開questionnaire數(shù)數(shù)據(jù)庫窗口口。(2)在數(shù)數(shù)據(jù)庫窗口口“對象””欄中按下下“表”按按鈕,在““已有對象象列表”中中雙擊admins表名稱或或選中admins表對象單單擊數(shù)據(jù)庫庫窗口工具具欄“打開開”按鈕,,將以數(shù)據(jù)據(jù)表視圖打打開如圖所所示的admins表結(jié)構(gòu)或或稱為空表表。(3)在admname單元元格輸入管管理員名稱稱lpshao、zhc,在在admpwd輸入入口令123456、111111類似方式可可向其他表表中添加數(shù)數(shù)據(jù)2.切換換不同視圖圖窗口在數(shù)據(jù)表視視圖窗口單單擊主窗口口工具欄的的“視圖””按鈕,可可以切換到到表設(shè)計(jì)視視圖窗口,,可以修改改表結(jié)構(gòu)。。在表設(shè)計(jì)計(jì)視圖窗口口單擊主窗窗口工具欄欄的“視圖圖”按鈕,,可以切換換到數(shù)據(jù)表表視圖窗口口在表中添添加數(shù)據(jù)。。3ODBC與JDBC如何在JSP應(yīng)用程程序中使用用數(shù)據(jù)庫((questionnaire)中的的數(shù)據(jù)呢??通過JSP訪問數(shù)數(shù)據(jù)庫中的的數(shù)據(jù)還需需要搭建ODBC橋橋梁并使用用JDBC作為交通通工具3.1搭搭建ODBC橋橋梁ODBC是是英文OpenDatabaseConnectivity的縮寫,,中文含義義為開放式式數(shù)據(jù)庫互互聯(lián)。ODBC是微微軟推出的的一種工業(yè)業(yè)標(biāo)準(zhǔn),一一種開放的的獨(dú)立于廠廠商的API應(yīng)用程程序接口,,可以跨平平臺訪問各各種個人計(jì)計(jì)算機(jī)、小小型機(jī)以及及主機(jī)系統(tǒng)統(tǒng)。ODBC是是一種訪問問數(shù)據(jù)庫的的工具,只只要操作系系統(tǒng)中有相相應(yīng)的ODBC驅(qū)動動程序,任任何程序都都可以通過過ODBC來操縱數(shù)數(shù)據(jù)庫。比比如操作系系統(tǒng)中如果果有Access的的ODBC驅(qū)動程序序,那么即即使計(jì)算機(jī)機(jī)中沒有Access軟件,,也可以在在JSP應(yīng)應(yīng)用程序中中對Access數(shù)數(shù)據(jù)庫文件件進(jìn)行添加加、刪除、、更新記錄錄的操作,,而且不必必知道這個個數(shù)據(jù)庫文文件的存放放位置。只只要寫出SQL指令令,ODBC驅(qū)動程程序會解決決訪問數(shù)據(jù)據(jù)庫文件的的一切問題題。DSN是是英文DateSourceName的縮寫寫,中文文名稱為為數(shù)據(jù)源源名稱。。它用來來定位和和標(biāo)識ODBC兼容的的數(shù)據(jù)庫庫。DSN是Web應(yīng)應(yīng)用程序序和數(shù)據(jù)據(jù)庫之間間連接的的紐帶,,搭建ODBC橋梁有有兩個任任務(wù),一一個是選選擇數(shù)據(jù)據(jù)庫驅(qū)動動程序。。再一個個重要任任務(wù)就是是設(shè)置DSN。。下面介紹紹定義連連接questionnaire數(shù)數(shù)據(jù)庫的的數(shù)據(jù)源源jsp的方法法,操作作步驟如如下所述述。打開“控控制面板板”窗口口選擇管理理工具在“管理理工具””對話框框中雙擊擊“數(shù)據(jù)據(jù)源(ODBC)”圖圖標(biāo),打打開“ODBC數(shù)據(jù)源源管理器器”對話話框,如如圖示,,選擇““系統(tǒng)DSN””標(biāo)簽。。打開數(shù)據(jù)據(jù)源選擇MicrosoftAccessDrive輸入DNS名稱稱選擇數(shù)據(jù)據(jù)庫單擊確定定即可完完成創(chuàng)建建完成以上上操作步步驟就建建立了一一個連接接數(shù)據(jù)庫庫questionnaire.mdb的的數(shù)據(jù)源源jsp,即搭搭建了一一個ODBC橋橋梁。JSP程程序可以以通過數(shù)數(shù)據(jù)源jsp找找到存放放在questionnaire.mdb數(shù)據(jù)庫庫中的表表對象以以及其中中的數(shù)據(jù)據(jù)。如果果數(shù)據(jù)庫庫改變了了名稱或或存放路路徑,不不必一個個一個地地修改程程序中所所有數(shù)據(jù)據(jù)庫的名名稱,只只要修改改DSN配置中中數(shù)據(jù)庫庫的存放放路徑就就可以了了。3.2JDBC的的作用1.什什么是JDBCJDBC是英文文JavaDataBaseConnectivity的縮寫寫,中文文稱為Java數(shù)據(jù)庫庫連接。。它是Sun提提供的標(biāo)標(biāo)準(zhǔn)數(shù)據(jù)據(jù)庫應(yīng)用用編程接接口(API::ApplicationProgrammingInterface),它它由Java語語言編寫寫的類和和接口組組成,存存放在java.sql類包包中,目目的是方方便開發(fā)發(fā)人員編編寫數(shù)據(jù)據(jù)庫應(yīng)用用程序。。JDBC可以看看成是一一種訪問問數(shù)據(jù)庫庫的方法法,只要要系統(tǒng)中中有相應(yīng)應(yīng)的JDBC驅(qū)驅(qū)動程序序,Java應(yīng)應(yīng)用程序序就可以以通過JDBC操縱數(shù)數(shù)據(jù)庫,,對數(shù)據(jù)據(jù)庫進(jìn)行行加、刪刪、改記記錄的操操作。而而且你根根本不用用知道這這個數(shù)據(jù)據(jù)庫放在在哪里。。2.常常用的JDBC接口java.sql.DriverManager:處理理驅(qū)動程程序的調(diào)調(diào)入,對對產(chǎn)生新新的數(shù)據(jù)據(jù)庫連接接提供支支持;java.sql.Connection:用于于對特定定數(shù)據(jù)庫庫進(jìn)行連連接;::代表一一個特定定的容器器,用來來對一個個特定的的數(shù)據(jù)庫庫執(zhí)行SQL語語句;::用于控控制對一一個特定定語句行行數(shù)據(jù)的的存取。。關(guān)于java.sql包包的接口及及其方法可到到網(wǎng)址/Java_Docs/html/zh_CN/api/index.html詳細(xì)查看。3.JDBC的功能JDBC的實(shí)實(shí)現(xiàn)類稱為JDBC驅(qū)動動程序。JDBC驅(qū)動程程序具有以下下功能:同一個數(shù)據(jù)庫庫建立連接;;向數(shù)據(jù)庫發(fā)送送SQL語句句;返回?cái)?shù)據(jù)庫處處理的結(jié)果。。這些功能是通通過JDBC中的一系列列接口來實(shí)現(xiàn)現(xiàn)的,這些接接口都在java.sql包中。所所以,在編寫寫訪問數(shù)據(jù)庫庫的JSP程程序時(shí)一定要要包含引入java.sql包的Java語句句。4在服務(wù)務(wù)器端通過JSP訪問數(shù)數(shù)據(jù)庫4.1通通過JSP頁頁面顯示數(shù)據(jù)據(jù)庫中的數(shù)據(jù)據(jù)(1)引入SQL類包<%@pageimport=“java.sql.*”%>語語句引入Java的SQL類包,(2)裝載并并注冊驅(qū)動程程序連接JdbcOdbc驅(qū)驅(qū)動程序的類類名為sun.jdbc.odbc.JdbcOdbcDriver,一般使用用下面的語句句裝載并注冊冊驅(qū)動程序::Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");(3)創(chuàng)建與與數(shù)據(jù)庫建立立連接的Connection對象象Connection對對象來自與java.sql.Connection接口口,它的作用用是與數(shù)據(jù)庫庫進(jìn)行連接,,通過DriverManager類的getConnection(url)方法,可以以創(chuàng)建一個Connection對對象,可用以以下語句創(chuàng)建建Connection對象:Connectionc=DriverManager.getConnection(url)(4)URL地址要使用JDBC連接數(shù)據(jù)據(jù)庫需要建立立一個URL地址,可以以使應(yīng)用程序序知道到哪里里找到數(shù)據(jù)庫庫中的表。創(chuàng)創(chuàng)建URL地地址的語法格格式如下:url=jdbc:odbc://[hostname][:port]/dbname[?user=value1][&password=value2][¶m1=value3][¶m2=value4]...(5)創(chuàng)建執(zhí)執(zhí)行SQL語語句的Statement對象作用是對一個個特定的數(shù)據(jù)據(jù)庫執(zhí)行SQL語句操作作。通過Connection對象象的createStatement()方法法經(jīng)過Statement類型轉(zhuǎn)換換可以得到一一個Statement對象,例如如下面的語句句:stmt=(Statement)c.createStatement();(6)ResultSet對象ResultSet對象象來自java.sql.ResultSet接口,它被被稱為結(jié)果集集,代表一個個特定的容器器,用來保存存查詢的所有有結(jié)果數(shù)據(jù)。。ResultSet對對象是通過Statement對象象的executeQuery(sql)方法法在執(zhí)行SQL語句后創(chuàng)創(chuàng)建的,例如如下面的語句句:ResultSetrs=s.executeQuery(sql);ResultSet對象象可以根據(jù)查查詢結(jié)果按行行對數(shù)據(jù)進(jìn)行行存取。存取取數(shù)據(jù)時(shí)可用用到以下方法法:next()getXXXX(n)(7)在頁面面上用表格顯顯示數(shù)據(jù)庫中中的數(shù)據(jù)使用HTML表格標(biāo)記碼碼與JSP表表達(dá)式語句、、Java的的while循環(huán)語句在在頁面上使用用表格了顯示示數(shù)據(jù)庫表對對象中的數(shù)據(jù)據(jù)。(8)釋放資資源最后要使用close(()方法釋放放所定義的s、c、rs對象資源。。這個過程如下下面的程序<%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注冊冊驅(qū)動程序Connectionc=DriverManager.getConnection("jdbc:odbc:jsp");//創(chuàng)建連接接數(shù)據(jù)源的對對象Statements=(Statement)c.createStatement();Stringsql="select*fromadmins";ResultSetrs=s.executeQuery(sql);out.println("<tableborder=1>");while(rs.next()){%><%out.println("<tr><td>");out.println(rs.getString(1));out.println("</td>");out.println("<td>");out.print(rs.getString(2));out.println("</td></tr>");%><%}%><%rs.close();s.close();c.close();%>4.2通通過JSP文文件在數(shù)據(jù)庫庫中添加與刪刪除(1)PreparedStatement對對象Statement的子子接口PreparedStatement對對象,使用的的SQL語句句中可以包含含用多個問號號“?”代表表的字段,這這樣的SQL語句稱為預(yù)預(yù)編譯的SQL語句,例例如Stringsql=="insertintoadminsvalues(?,?)");通過PreparedStatement對象象的setXXXX())方法可以分分別給“?””代表的字段段賦值,例如如ps.setString(1,"文本數(shù)數(shù)據(jù)");添添加文本類型型數(shù)據(jù),使用用ps.setInt(2,12)添加整整數(shù)型數(shù)據(jù),,按SQL語語句中“?””字段出現(xiàn)的的順序?yàn)橛涗涗浿械淖侄翁硖砑訑?shù)據(jù),從從1開始。通通過PreparedStatement對象的executeUpdate()方法法完成添加數(shù)數(shù)據(jù)的任務(wù)。。例6.12在數(shù)據(jù)庫添加加與刪除數(shù)據(jù)據(jù)的程序(P155)。。<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*"%><html><body><b>顯示添添加與刪除后后的數(shù)據(jù)</b><p><%PreparedStatementps;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注冊冊驅(qū)動程序Connectionc=DriverManager.getConnection("jdbc:odbc:jsp");//創(chuàng)建連接接數(shù)據(jù)源的對對象Statements=(Statement)c.createStatement();//添加記錄錄Stringsql1="insertintoadminsvalues(?,?)";ps=(PreparedStatement)c.prepareStatement(sql1);ps.setString(1,"張馳");ps.setString(2,"888888");ps.executeUpdate();//刪除記錄錄Stringsql2="deletefromadminswhereadmname='zhc'";s.executeUpdate(sql2);(接上頁)//查詢記錄錄ResultSetrs=s.executeQuery("select*fromadmins");out.println("<tableborder=1>");while(rs.next()){out.println("<tr><td>");out.println(rs.getString(1));out.println("</td>");out.println("<td>");out.print(rs.getString(2));out.println("</td></tr>");}rs.close();s.close();c.close();%></body></html>效果圖5在客戶端通過過頁面訪問數(shù)數(shù)據(jù)庫5.1創(chuàng)創(chuàng)建兩個重復(fù)復(fù)使用的共用用文件為了使JSP代碼簡單清清晰,可將連連接數(shù)據(jù)庫的的任務(wù)單獨(dú)編編寫為一個共共用的JSP文件,將數(shù)數(shù)據(jù)庫查詢結(jié)結(jié)果按表格輸輸出的任務(wù)編編寫為一個共共用的JSP文件。當(dāng)其其它程序需要要使用數(shù)據(jù)庫庫連接或用表表格輸出數(shù)據(jù)據(jù)庫查詢的結(jié)結(jié)果時(shí),只要要稍加修改或或直接將共用用的JSP文文件包含在jsp文件中中即可。這樣樣可以使代碼碼重復(fù)使用,,還可以增加加程序的可維維護(hù)性。1.創(chuàng)建完成成連接數(shù)據(jù)庫庫任務(wù)的JSP文件例6.13連接數(shù)據(jù)源jsp的JSP文件(jdbc-jsp.jspP157)。jdbc-jsp.jsp源代碼如如下:<%@pageimport="java.sql.*"%><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Stringurl="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};"+"DBQ=C://WZKF//myjsp//DBA\\questionnaire.mdb";Connectionc=DriverManager.getConnection(url);Statements=(Statement)c.createStatement();PreparedStatementps=null;%>2.創(chuàng)建完成成用表格輸出出數(shù)據(jù)庫查詢詢?nèi)蝿?wù)的JSP文件例6.14按表格輸出數(shù)數(shù)據(jù)庫查詢結(jié)結(jié)果的JSP文件(table.jspP157)。。table.jsp源代代碼如下:<%out.println("<tableborder=1>");while(rs.next()){out.println("<tr><td>");out.println(rs.getString(1));out.println("</td>");out.println("<td>");out.print(rs.getString(2));out.println("</td></tr>");}rs.close();s.close();c.close();%>5.2在在客戶端向數(shù)數(shù)據(jù)庫添加數(shù)數(shù)據(jù)1.創(chuàng)建用戶戶輸入數(shù)據(jù)頁頁面例6.15創(chuàng)建一個在客客戶端瀏覽器器中用戶輸入入數(shù)據(jù)的HTML頁面((6-16.htmP157))。<strong>向數(shù)據(jù)據(jù)庫添加數(shù)據(jù)據(jù)</strong><formname="form1"method="post"action="6-16.jsp"><p>用戶名名<inputname="yhm"type="text"id="yhm"size="15"></p><p>口令令<inputtype="password"name="kl"size="15"></p><p><inputtype="submit"name="Submit"value="提交"><inputtype="reset"name=""value="重重置"></font></p></form>2.創(chuàng)建數(shù)據(jù)據(jù)處理與顯示示數(shù)據(jù)結(jié)果的的頁面例6.16向數(shù)據(jù)庫添加加數(shù)據(jù)并顯示示添加結(jié)果的的JSP頁面面(6-16.jspP158))。<%@pagecontentType="text/html;charset=gb2312"%><b>在客戶戶端添加數(shù)據(jù)據(jù)到數(shù)據(jù)庫</b><p><%@includefile="jdbc-jsp.jsp"%><%//添加數(shù)據(jù)據(jù)Stringyhm=request.getParameter("yhm");Stringkl=request.getParameter("kl");ps=c.prepareStatement("insertintoadminsvalues(?,?)");ps.setString(1,yhm);ps.setString(2,kl);ps.execute();//查詢記錄錄ps=c.prepareStatement("select*fromadmins");ResultSetrs=ps.executeQuery();%><%@includefile="table.jsp"%>5.3在在客戶端輸入入查詢條件并并顯示查詢結(jié)結(jié)果例6.17按用戶名查詢詢用戶口令的的JSP文件件(6-17.jspP159)。<%@pagecontentType="text/html;charset=gb2312"%><formname="form1"method="post"action="6-17.jsp"><p>用戶名名<inputname="yhm"type="text"id="yhm"size="15"></p><p><inputtype="submit"name="Submit"value="執(zhí)行查詢"><inputtype="reset"name=""value="重重置"></font></p></form><%@includefile="jdbc-jsp.jsp"%><%Stringname=request.getParameter("yhm");ps=c.prepareStatement("select*fromadminswhereadmname=?");ps.setString(1,name);ResultSetrs=ps.executeQuery();%><HR>按用戶名查詢詢的結(jié)果<%@includefile="table.jsp"%>效果圖5.4一一個簡單的會會員表維護(hù)系系統(tǒng)下面將通過幾幾個JSP程程序文件,構(gòu)構(gòu)成一個Web應(yīng)用系統(tǒng)統(tǒng),通過客戶戶端對存放在在服務(wù)器上questionnaire數(shù)據(jù)庫庫中的會員表表admins進(jìn)行顯示示、更改、添添加或刪除的的操作。會員表維護(hù)系系統(tǒng)組成會員表維護(hù)系系統(tǒng)包含如下下文件:保存存存放數(shù)據(jù)的的會員表admins的的數(shù)據(jù)庫文件件questionnaire、連連接數(shù)據(jù)庫的的JSP文件件jdbc-jsp.jsp、會會員表維護(hù)主主界面的JSP文件index.jsp、組成成主界面“添添加記錄”部部分的HTML文件adduser.htm、、添加記錄到到數(shù)據(jù)庫的JSP文件adduser.jsp等9個文件件。會員表維護(hù)主主界面例6.18會員表維護(hù)系系統(tǒng)的所有功功能都體現(xiàn)在在其主界面(index.jsp)上,在該頁頁面可以進(jìn)行行添加、更改改、刪除的操操作,其具體體功能的實(shí)現(xiàn)現(xiàn)交由其他JSP文件處處理,index.jsp的界面如如圖所示。完整代碼參見見P160下面是部分頁頁面代碼片段段Index.jsp中中讀取數(shù)據(jù)庫庫記錄的jsp程序(P160)<%Stringsql="select*fromadmins";ResultSetrs=s.executeQuery(sql);Stringadminname;while(rs.next()){adminname=rs.getString(1);out.print("<tr>");out.print("<tdalign=center>"+adminname+"</td>");out.print("<tdalign=center><ahref=edituser.jsp?user="+adminname+">更更改密碼</a></td>");if(!adminname.equals("admin")){out.print("<tdalign=center><ahref=deltuser.jsp?user="+adminname+">刪刪除會員</a></td>");}elseout.print("<tdalign=center><fontcolor=red>超級用戶不不能刪除</font></td>");out.print("</tr>");}%>adduser.jsp向數(shù)據(jù)庫庫添加記錄部部分程序(P161)在主界面中添添加的會員記記錄數(shù)據(jù)將提提交給adduser.jsp處理理,其代碼如如下<%@pagecontentType="text/html;charset=GB2312"%><%@includefile="jdbc-jsp.jsp"%><%Stringname=request.getParameter("name");Stringpassword=request.getParameter("password");Stringconfirm=request.getParameter("confirm");Stringsql="select*fromadminswhereadmname='"+name+"'";ResultSetrs=s.executeQuery(sql);out.print("<center>");Stringid=null;while(rs.next())id=rs.getString(1);……….//省略了驗(yàn)證證數(shù)據(jù)是否為為空程序Stringsql1="insertintoadmins(admname,admpwd)values('"+name+"','"+password+"')";s.executeUpdate(sql1);response.sendRedirect("index.jsp");%>刪除會員”操操作的JSP文件deltuser.jsp((P162)<%@pagecontentType="text/html;charset=GB2312"%><%@includefile="jdbc-jsp.jsp"%><%Stringdeluser=request.getParameter("user");Stringsql="deletefromadminswhereadmname='"+deluser+"'";s.executeUpdate(sql);response.sendRedirect("index.jsp");out.print("<inputtype=buttonvalue=回上一頁onclick=history.back();>");%>“更改密碼””的JSP文件edituser.jsp((P163)<%@pagecontentType="text/html;charset=GB2312"%><%Stringname=request.getParameter("user");%><divalign="center"><hr><center>更改會員員密碼<formname="form1"method="post"action="moduser.jsp"><tablecellspacing="0"cellpadding="0"width="250"align="center"border="0"><tr><td>會員名名稱<inputclass="smallInput"size="8"readonlyname="name"value="<%=name%>"><br>會員密碼<inputtype="password"size="8"name="password"><br>確認(rèn)密碼<inputtype="password"size="8"name="confirm"><br><br><br></td></tr><tr><td><divalign="center"><inputtype="submit"value="確認(rèn)"name="Submit"><inputtype="reset"value="復(fù)位"name="Submit2"><br><br></div></td></tr></table></form></center></div>將更改數(shù)據(jù)添添加數(shù)據(jù)庫的的JSP文件件moduser.jsp(P163)<%@pagecontentType="text/html;charset=GB2312"%><%@includefile="jdbc-jsp.jsp"%><%Stringname=request.getParameter("name");Stringpassword=request.getParameter("password");Stringconfirm=request.getParameter("confirm");if(password.length()==0){Stringerrmsg="密密碼不可為空空!";out.print("<fontcolor=greensize=5>錯誤信息<hr></font><fontcolor=red>"+errmsg+"</font><hr>");}elseif(!password.equals(confirm)){Stringerrmsg="請請重新確認(rèn)密密碼!";out.print("<fontcolor=greensize=5>錯誤信息<hr></font><fontcolor=red>"+errmsg+"</font><hr>");}else{Stringsql="updateadminssetadmpwd='"+password+"'";s.executeUpdate(sql);response.sendRedirect("index.jsp");}out.print("<inputtype=buttonvalue=回上一頁onclick=history.back();>");%>5.5連連接Access數(shù)據(jù)庫庫的不同方式式1連接帶有有用戶名與密密碼的數(shù)據(jù)庫庫為了數(shù)據(jù)庫的的安全,可在在Access數(shù)據(jù)庫中中設(shè)置用戶名名與密碼,例例如設(shè)置用戶戶名為“l(fā)pshao””、密碼為““123456”,數(shù)據(jù)據(jù)源為jsp,然后可

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論