版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java資料庫應(yīng)用
10.1資料庫應(yīng)用開發(fā)簡(jiǎn)介作為有效的數(shù)據(jù)存儲(chǔ)和組織管理工具,資料庫的應(yīng)用日益廣泛目前主流的資料庫產(chǎn)品有Oracle、SQLServer、DB2和SyBase等多種。在資料庫開發(fā)領(lǐng)域中,有三個(gè)方面需要掌握:SQL語言、ODBC數(shù)據(jù)訪問介面和JDBC資料庫訪問介面。SQL語言SQL(StructuredQueryLanguage)是使用關(guān)係模型的資料庫語言,用於和各類資料庫連接,提供通用的數(shù)據(jù)管理和查詢功能。SQL語言最初由IBM公司開發(fā),實(shí)現(xiàn)了關(guān)係資料庫中的資訊檢索。後幾經(jīng)修改和完善,被國(guó)際標(biāo)準(zhǔn)化組織確定為國(guó)際標(biāo)準(zhǔn),目前執(zhí)行的是1992年制定的SQL-92標(biāo)準(zhǔn)。SQL可以為各種支持SQL-92標(biāo)準(zhǔn)的資料庫管理系統(tǒng)(DBMS)所接受和處理,通常各種DBMS都提供圖形用戶介面,以使用戶直接對(duì)數(shù)據(jù)庫進(jìn)行操作。但SQL語言本身並不是完整的編程語言,還需要與其他高級(jí)編程語言配合,才能實(shí)現(xiàn)應(yīng)用程式對(duì)數(shù)據(jù)庫的訪問操作。ODBC數(shù)據(jù)訪問介面開放式資料庫互連ODBC(OpenDataBaseConnectivity)是微軟公司開發(fā)的一套開發(fā)資料庫系統(tǒng)應(yīng)用程式介面規(guī)範(fàn),它支持應(yīng)用程式以標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語句操作各種不同的資料庫。JDBC數(shù)據(jù)訪問介面為支持Java程式的資料庫操作功能,Java語言採(cǎi)用了專門Java資料庫編程介面(JDBC,JavaDataBaseConnectivity),用於在Java程式中實(shí)現(xiàn)資料庫操作功能並簡(jiǎn)化操作過程。JDBC支持基本SQL語句,提供多樣化的資料庫連接方式,為各種不同的資料庫提供統(tǒng)一的操作介面10.2SQL語言概述SQL(StructuredQueryLanguage)是關(guān)係型資料庫的標(biāo)準(zhǔn)語言,是由國(guó)際標(biāo)準(zhǔn)組織提出的,各種關(guān)係型資料庫都支持SQL指令,Oracle在基本的SQL基礎(chǔ)上進(jìn)行了擴(kuò)充。SQL語句有如下的兩大特點(diǎn)(1)SQL是一種類似於英語的語言,很容易理解和書寫。(2)SQL語言是非過程化的語言(第四代語言)。SQL集DDL(DataDefinitionLanguage:數(shù)據(jù)定義語言),DML(DataManipulationLanguage:數(shù)據(jù)操作語言)和DCL(DataControlLanguage:數(shù)據(jù)控制語言)於一體。用SQL語言可以實(shí)現(xiàn)資料庫生命週期的全部活動(dòng)。SQL語句分類SQL分類描述數(shù)據(jù)定義語言(DDL)數(shù)據(jù)定義語言(DDL)用於定義、修改或者刪除資料庫對(duì)象,如CreateTable等數(shù)據(jù)操縱語言(DQL)數(shù)據(jù)查詢語句(DataQueryLanguage,DQL)用於對(duì)數(shù)據(jù)進(jìn)行檢索。如最常用的Select語句數(shù)據(jù)操縱語言(DML)數(shù)據(jù)操縱語言(DML)用於訪問、建立或者操縱在資料庫中已經(jīng)存在數(shù)據(jù),如Select、Insert、Update和Delete等等。事務(wù)控制語言(TCL)事務(wù)控制語言(TransactControlLanguage)管理DML語句所做的修改,是否保存修改或者放棄修改。如:Commit、Rollback、Savepoint、SetTransaction等命令。數(shù)據(jù)控制語言(DCL)數(shù)據(jù)控制語言(DCL)管理對(duì)數(shù)據(jù)庫內(nèi)對(duì)象的訪問許可權(quán)和授予和回收,如Grant、Revoke等等?;維QL語句基本的SQL語句包括DQL和DML。也就是對(duì)數(shù)據(jù)庫最常用的四大基本操作:查詢(Select)、插入(Insert)、更新(Update)和刪除(Delete)DQL的3種基本格式1.基本句型一:(最簡(jiǎn)單的SELECT語句)SELECT字段名FROM數(shù)據(jù)表例1.SELECT*FROMgrade功能說明:將grade表中的所有字段取出來。例2.SELECT學(xué)號(hào),姓名FROMgrade功能說明:將grade表中學(xué)號(hào)和姓名字段取出來。例3.SELECT學(xué)號(hào),姓名,語文+數(shù)學(xué)+英語as總成績(jī)FROMgrade功能說明:將grade表中的學(xué)號(hào)和姓名取出來,並將語文、數(shù)學(xué)和英語成績(jī)相加產(chǎn)生虛擬列總成績(jī)。2.基本句型二:使用條件查詢SELECT字段名FROM數(shù)據(jù)表WHERE篩選條件測(cè)試句型如下。例1.SELECT*FROMgradeWHERE數(shù)學(xué)>60功能說明:把所有數(shù)學(xué)成績(jī)大於60分的記錄選出來。例2.SELECT*FROMgradeWHERE數(shù)學(xué)=300or語文=300功能說明:把數(shù)學(xué)成績(jī)等於300分或者語文成績(jī)等於300分的人選出來。例3.Like子句基本格式一:“_”匹配。功能說明:每個(gè)下劃線匹配一個(gè)任意字元,注意只匹配一個(gè)字元。比如:姓名like‘_敏’,匹配姓名以“敏”字結(jié)尾且字?jǐn)?shù)等於二的所有數(shù)據(jù)記錄,如:“張敏”。例4.Like子句基本格式二:“%”匹配。比如:姓名Like'%敏%',匹配姓名中出現(xiàn)“敏”的所有數(shù)據(jù)記錄,如:“周惠敏”,“於敏”、“敏大”、“敏二”等。比如要在資料庫中查詢姓江的人,只要利用一條SQL語句就可以了,SELECT*FROM資料庫表WHERE姓名Like'江%'。3.基本句型三:(進(jìn)行排序)SELECT字段名FROM數(shù)據(jù)表ORDERBY字段名測(cè)試句型如下。(1)SELECT*FROMgradeORDERBY數(shù)學(xué)注:從低到高排序功能說明:從grade表中取出所有字段,並按數(shù)學(xué)成績(jī)排序。(2)SELECT*FROMgradeORDERBY數(shù)學(xué),語文功能說明:從grade表中取出所有字段,並按數(shù)學(xué)成績(jī)排序,如果數(shù)學(xué)成績(jī)相同則按照語文成績(jī)排序。(3)SELECT*FROMgradeORDERBY數(shù)學(xué)desc注:從高到低排序功能說明:從grade表中取出所有字段,並按數(shù)學(xué)成績(jī)倒序。(4)SELECTtop5*FROMgrade功能說明:從grade表中取出前五條記錄的所有字段。DML的基本格式(1)DELETE指令:刪除數(shù)據(jù)記錄。基本語法:DELETEFROM數(shù)據(jù)表WHERE條件例:DELETEfromgradeWHERE數(shù)學(xué)=0功能說明:刪除所有數(shù)學(xué)成績(jī)?yōu)榱愕挠涗?,如果沒有WHERE子句,則刪除所有記錄。(2)UPDATE指令:更新數(shù)據(jù)記錄?;菊Z法:UPDATE數(shù)據(jù)表SET字段值=新值WHERE條件例1:UPDATEgradeSET數(shù)學(xué)=數(shù)學(xué)+10說明:將grade表中所有人的成績(jī)加10分例2:UPDATEgradeSET數(shù)學(xué)=100WHERE姓名like'%敏%'功能說明:將姓名中含有敏的人的數(shù)學(xué)成績(jī)更新為100分INSERTINTO指令(3)INSERTINTO指令:添加數(shù)據(jù)記錄。基本格式1:INSERTINTO數(shù)據(jù)表VALUES(字段新值)基本格式2:INSERTINTO數(shù)據(jù)表(字段一,字段二,……)VALUES(字段新值)其中關(guān)鍵字兩種格式的區(qū)別是:當(dāng)values含有資料庫表所有字段的值,並且順序和數(shù)據(jù)庫字段一致時(shí),就可以省略資料庫表後面的字段名稱。例1:INSERTINTOgrade(學(xué)號(hào),姓名,數(shù)學(xué))VALUES(1234,'周潤(rùn)發(fā)',70)例2:INSERTINTOgradeVALUES(5678,'周潤(rùn)發(fā)',70,80,90)功能說明:該語句等價(jià)於:INSERTINTOgrade(學(xué)號(hào),姓名,語文,數(shù)學(xué),英語)VALUES(5678,'周潤(rùn)發(fā)',70,80,90)聚合函數(shù)聚合函數(shù)在資訊管理系統(tǒng)經(jīng)常使用,功能是做一些基本的統(tǒng)計(jì)和計(jì)算。聚合函數(shù)有5個(gè),分別是SUM函數(shù)、AVG函數(shù)、COUNT函數(shù)、MAX函數(shù)和MIN函數(shù)。SUN函數(shù)(1)SUN函數(shù),功能是算出某個(gè)字段的總值。例.SELECTSUM(數(shù)學(xué))AsTotalFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績(jī)總和,這個(gè)數(shù)值的列名為Total。在SQL輸入窗口中輸入,如圖聚合函數(shù)(2)AVG函數(shù),功能是算出某個(gè)字段的平均值。例.SELECTAVG(數(shù)學(xué))AsAverageFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績(jī)平均分,這個(gè)數(shù)值的列名為Average。(3)COUNT函數(shù),功能是算出返回記錄的行數(shù)。例.SELECTCOUNT(*)AsCountsFROMgrade功能說明:求出滿足條件的記錄總數(shù)。(4)MAX函數(shù),功能是算出某個(gè)字段的最大值。例.SELECTMAX(數(shù)學(xué))AsFirstFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績(jī)的最高分,這個(gè)數(shù)值的列名為First。(5)MIN函數(shù),功能是算出某個(gè)字段的總值。例.SELECTMIN(數(shù)學(xué))AsLastFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績(jī)的最低分,這個(gè)數(shù)值的列名為L(zhǎng)ast。分組查詢分組查詢包括GROUPBY和HAVING關(guān)鍵字。比如計(jì)算某班男生女生的數(shù)學(xué)平均分,利用可以利用分組查詢完成。grade表中添加一列“性別”,如person1.mdb庫中的grade表,可以使用“SELECT性別,AVG(數(shù)學(xué))as平均分FROMgradeGROUPBY性別”得到男生和女生的平均分,執(zhí)行的結(jié)果如圖計(jì)算所有男生的數(shù)學(xué)平均成績(jī),有兩種方法:(1)SELECT性別,AVG(數(shù)學(xué))as平均分FROMgradeGROUPBY性別HAVING性別='男'(2)SELECT性別,AVG(數(shù)學(xué))as平均分FROMgradeWHERE性別='男'GROUPBY性別分組查詢?cè)谑褂梅纸M查詢的時(shí)候,有4點(diǎn)需要注意。(1)WHERE子句必須放在GROUPBY子句之前。(2)HAVING子句中只能包含分組字段或者聚合函數(shù)。(3)SELECT語句選擇的列只能是分組字段或者聚合函數(shù)。(4)HAVING必須放在GROUPBY子句之後。交叉查詢考慮3個(gè)表:學(xué)生表(Student)、課程表(Course)和選課表(SC)表的關(guān)係如圖交叉查詢其中:(1)學(xué)生表中的sno表示學(xué)生學(xué)號(hào),sname表示學(xué)生姓名。(2)課程表中cno表示課程編號(hào),cname表示課程的名稱。(3)選課表中的sno表示學(xué)生學(xué)號(hào),cno表示課程編號(hào)。查找選擇課程為“軟體工程”的所有同學(xué)姓名?可以利用如下的SQL語句。SELECTb.snameFROMsca,studentb,coursecWHEREa.cno=c.cno
ANDa.sno=b.snoandc.cname='軟體工程'其中“sca”表示給表sc起個(gè)別名為a,同樣“studentb”是給student表起個(gè)別名b。該查詢實(shí)現(xiàn)了三個(gè)表之間的交叉查詢。10.3JDBC的結(jié)構(gòu)
目前,比較常見的JDBC驅(qū)動(dòng)程式可分為以下4種類型:(1)JDBC-ODBC橋加ODBC驅(qū)動(dòng)程式:JDBC-ODBC橋產(chǎn)品利用ODBC驅(qū)動(dòng)程式提供JDBC訪問。在伺服器上必須可以安裝ODBC驅(qū)動(dòng)程式。(2)本地API:這種類型的驅(qū)動(dòng)程式把客戶機(jī)API上的JDBC調(diào)用轉(zhuǎn)換為Oracle、Sybase、Informix、DB2或其他DBMS的調(diào)用。(3)JDBC網(wǎng)路純Java驅(qū)動(dòng)程式:這種驅(qū)動(dòng)程式將JDBC轉(zhuǎn)換為與DBMS無關(guān)的網(wǎng)路協(xié)議,之後這種協(xié)議又被某個(gè)伺服器轉(zhuǎn)換為一種DBMS協(xié)議。這種網(wǎng)路伺服器中間件能夠?qū)⑺募僇ava客戶機(jī)連接到多種不同的資料庫上。(4)本地協(xié)議純Java驅(qū)動(dòng)程式:這種類型的驅(qū)動(dòng)程式將JDBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)路協(xié)議。這將允許從客戶機(jī)機(jī)器上直接調(diào)用DBMS伺服器,是Intranet訪問的一個(gè)很實(shí)用的解決方法。第3類和第4類驅(qū)動(dòng)程式將成為JDBC訪問資料庫的首選方法。第1類和第2類驅(qū)動(dòng)程式在直接的純Java驅(qū)動(dòng)程式還沒有上市前會(huì)作為過渡方案來使用。數(shù)據(jù)驅(qū)動(dòng)程式使用JDBC的第一步是安裝驅(qū)動(dòng)程式。大多數(shù)資料庫都有JDBC驅(qū)動(dòng)程式,常用的JDBC驅(qū)動(dòng)程式如圖所示。Connection對(duì)象建立是建立與資料庫之間的連接,也就是創(chuàng)建一個(gè)Connection的實(shí)例。DriverManager類的getConnection()方法將建立資料庫的連接:publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException在程式的最後,應(yīng)該關(guān)閉Connection對(duì)象:publicvoidclose()throwsSQLExceptionStatement對(duì)象Statement對(duì)象用於將SQL語句發(fā)送到資料庫中。存在3種Statement對(duì)象:(1)Statement;(2)PreparedStatement(從Statement繼承而來);(3)CallableStatement(從PreparedStatement繼承而來)。Statement介面Statement介面提供了兩種執(zhí)行SQL語句的常用方法:publicResultSet
executeQuery(Stringsql)throwsSQLException用於產(chǎn)生單個(gè)ResultSet的語句,例如SELECT語句。publicint
executeUpdate(Stringsql)throwsSQLException用於執(zhí)行INSERT、UPDATE或DELETE語句以及SQLDDL語句,例如CREATETABLE和DROPTABLE。該方法返回一個(gè)整數(shù),指示受影響的行數(shù)。ResultSet對(duì)象ResultSet包含符合SQL語句執(zhí)行結(jié)果所有行,並且它通過一套get方法提供了對(duì)這些行中數(shù)據(jù)的訪問,常用的get方法有:int
getInt(int
columnIndex),取得當(dāng)前行中第columnIndex列的整數(shù)的值。int
getInt(StringcolumnName),取得當(dāng)前行中列名為columnName的整數(shù)的值。DategetDate(int
columnIndex),取得當(dāng)前行中第columnIndex列的日期的值。DategetDate(StringcolumnName),取得當(dāng)前行中列名為columnName的日期的值。publicStringgetString(int
columnIndex),取得當(dāng)前行中第columnIndex列的字串的值。publicStringgetString(StringcolumnName),取得當(dāng)前行中列名為columnName的字串的值。其他類型的get方法可以參考java文檔。ResultSet維護(hù)指向其當(dāng)前數(shù)據(jù)行的游標(biāo),讓游標(biāo)向下移動(dòng)一行的方法是:publicbooleannext()throwsSQLException10.4JDBC數(shù)據(jù)源
案例名稱:使用JDBC-ODBC橋讀取Access資料庫程式名稱:DbTest1.java案例名稱:使用JDBC-ODBC橋操作Access資料庫
程式名稱:DbTest2.java操作Access資料庫案例名稱:使用JDBC-ODBC橋讀取Excel數(shù)據(jù)源程式名稱:DbTest3.javaPreparedStatement對(duì)象案例名稱:使用PreparedStatement程式名稱:DbTest4.java10.5JDBC數(shù)據(jù)格式根據(jù)JDBC的5個(gè)常用對(duì)象的功能,可以將數(shù)據(jù)訪問分為4個(gè)基本格式。
格式一:執(zhí)行基本SQL語句
案例名稱:數(shù)據(jù)訪問基本格式一
Class.forName("JDBC驅(qū)動(dòng)程式"); Connectionconn=DriverManager.getConnection("相應(yīng)JDBC驅(qū)動(dòng)程式的連接串); Statementstmt=conn.createStatement(); ResultSetrs=stmt.executeQuery("DQL語句");//如果是數(shù)據(jù)查詢
stmt.executeUpdate("DML語句");//如果是數(shù)據(jù)操作格式二:實(shí)現(xiàn)分頁在JDBC1.0中,結(jié)果只能利用next方法每次向前移動(dòng)一行。在JDBC2.0中,增加了一類新的結(jié)果集,稱為可滾動(dòng)結(jié)果集案例名稱:數(shù)據(jù)訪問基本格式二
Class.forName("JDBC驅(qū)動(dòng)程式"); Connectionconn=DriverManager.getConnection("相應(yīng)JDBC驅(qū)動(dòng)程式的連接串); Statementstmt=connect.createStatement(結(jié)果集類型,結(jié)果集併發(fā)性);
ResultSet
rs=stmt.executeQuery("DQL語句");//如果是數(shù)據(jù)查詢
stmt.executeUpdate("DML語句");//如果是數(shù)據(jù)操作結(jié)果集類型結(jié)果集類型有3種:ResultSet.TYPE_FORWORD_ONLY:指定ResultSet對(duì)象是不可滾動(dòng),這是默認(rèn)值。ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet對(duì)象是可滾動(dòng)的,但是對(duì)數(shù)據(jù)庫中修改不敏感。ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet對(duì)象是可滾動(dòng)的,而且對(duì)數(shù)據(jù)庫的修改敏感。修改對(duì)結(jié)果集的影響類型看到內(nèi)部更新看到內(nèi)部刪除看到內(nèi)部插入看到外部更新看到外部刪除看到外部插入只向前是否否否否否可滾動(dòng)不敏感是是否否否否可滾動(dòng)敏感是是否是否否結(jié)果集的併發(fā)性結(jié)果集的併發(fā)性(Concurrency)決定ResultSet對(duì)象是否可以修改資料庫中的行??梢允褂肦esultSet類中定義的int常量來指定結(jié)果集的併發(fā)性。ResultSet.CONCUR_READ_ONLY,指定ResultSet對(duì)象不能修改資料庫,默認(rèn)值。ResultSet.CONCUR_UPDATABLE,指定ResultSet對(duì)象可以修改資料庫。格式三:執(zhí)行帶參數(shù)的SQL語句案例名稱:數(shù)據(jù)訪問基本格式三
Class.forName("JDBC驅(qū)動(dòng)程
溫馨提示
- 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年華師大版九年級(jí)地理下冊(cè)月考試卷含答案
- 2025年統(tǒng)編版八年級(jí)地理下冊(cè)階段測(cè)試試卷
- 2025年粵人版高三歷史下冊(cè)月考試卷
- 2025年外研銜接版選擇性必修1物理下冊(cè)階段測(cè)試試卷含答案
- 二零二五版內(nèi)墻涂料工程涂料涂裝產(chǎn)業(yè)鏈上下游合作合同4篇
- 2025年浙教新版八年級(jí)歷史上冊(cè)月考試卷含答案
- 2025年粵教滬科版七年級(jí)語文上冊(cè)月考試卷含答案
- 2025年度生態(tài)農(nóng)業(yè)個(gè)人果園承包經(jīng)營(yíng)權(quán)轉(zhuǎn)讓合同范本2篇
- 2025年度個(gè)人藝術(shù)品質(zhì)押擔(dān)保合同書4篇
- 2025年上外版七年級(jí)物理下冊(cè)月考試卷
- 智能養(yǎng)老院視頻監(jiān)控技術(shù)方案
- 你比我猜題庫課件
- 體育概論(第二版)課件第三章體育目的
- 無人駕駛航空器安全操作理論復(fù)習(xí)測(cè)試附答案
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡(jiǎn)介
- 老年人心理健康量表(含評(píng)分)
- 《小兒靜脈輸液速度》課件
- 營(yíng)銷人員薪酬標(biāo)準(zhǔn)及績(jī)效考核辦法
- 醫(yī)院每日消防巡查記錄表
評(píng)論
0/150
提交評(píng)論