版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Java數(shù)據(jù)庫應(yīng)用
10.1數(shù)據(jù)庫應(yīng)用開發(fā)簡介作為有效的數(shù)據(jù)存儲和組織管理工具,數(shù)據(jù)庫的應(yīng)用日益廣泛目前主流的數(shù)據(jù)庫產(chǎn)品有Oracle、SQLServer、DB2和SyBase等多種。在數(shù)據(jù)庫開發(fā)領(lǐng)域中,有三個方面需要掌握:SQL語言、ODBC數(shù)據(jù)訪問接口和JDBC數(shù)據(jù)庫訪問接口。SQL語言SQL(StructuredQueryLanguage)是使用關(guān)系模型的數(shù)據(jù)庫語言,用于和各類數(shù)據(jù)庫連接,提供通用的數(shù)據(jù)管理和查詢功能。SQL語言最初由IBM公司開發(fā),實現(xiàn)了關(guān)系數(shù)據(jù)庫中的信息檢索。后幾經(jīng)修改和完善,被國際標準化組織確定為國際標準,目前執(zhí)行的是1992年制定的SQL-92標準。SQL可以為各種支持SQL-92標準的數(shù)據(jù)庫管理系統(tǒng)(DBMS)所接受和處理,通常各種DBMS都提供圖形用戶界面,以使用戶直接對數(shù)據(jù)庫進行操作。但SQL語言本身并不是完整的編程語言,還需要與其他高級編程語言配合,才能實現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問操作。ODBC數(shù)據(jù)訪問接口開放式數(shù)據(jù)庫互連ODBC(OpenDataBaseConnectivity)是微軟公司開發(fā)的一套開發(fā)數(shù)據(jù)庫系統(tǒng)應(yīng)用程序接口規(guī)范,它支持應(yīng)用程序以標準的ODBC函數(shù)和SQL語句操作各種不同的數(shù)據(jù)庫。JDBC數(shù)據(jù)訪問接口為支持Java程序的數(shù)據(jù)庫操作功能,Java語言采用了專門Java數(shù)據(jù)庫編程接口(JDBC,JavaDataBaseConnectivity),用于在Java程序中實現(xiàn)數(shù)據(jù)庫操作功能并簡化操作過程。JDBC支持基本SQL語句,提供多樣化的數(shù)據(jù)庫連接方式,為各種不同的數(shù)據(jù)庫提供統(tǒng)一的操作界面10.2SQL語言概述SQL(StructuredQueryLanguage)是關(guān)系型數(shù)據(jù)庫的標準語言,是由國際標準組織提出的,各種關(guān)系型數(shù)據(jù)庫都支持SQL指令,Oracle在基本的SQL基礎(chǔ)上進行了擴充。SQL語句有如下的兩大特點(1)SQL是一種類似于英語的語言,很容易理解和書寫。(2)SQL語言是非過程化的語言(第四代語言)。SQL集DDL(DataDefinitionLanguage:數(shù)據(jù)定義語言),DML(DataManipulationLanguage:數(shù)據(jù)操作語言)和DCL(DataControlLanguage:數(shù)據(jù)控制語言)于一體。用SQL語言可以實現(xiàn)數(shù)據(jù)庫生命周期的全部活動。SQL語句分類SQL分類描述數(shù)據(jù)定義語言(DDL)數(shù)據(jù)定義語言(DDL)用于定義、修改或者刪除數(shù)據(jù)庫對象,如CreateTable等數(shù)據(jù)操縱語言(DQL)數(shù)據(jù)查詢語句(DataQueryLanguage,DQL)用于對數(shù)據(jù)進行檢索。如最常用的Select語句數(shù)據(jù)操縱語言(DML)數(shù)據(jù)操縱語言(DML)用于訪問、建立或者操縱在數(shù)據(jù)庫中已經(jīng)存在數(shù)據(jù),如Select、Insert、Update和Delete等等。事務(wù)控制語言(TCL)事務(wù)控制語言(TransactControlLanguage)管理DML語句所做的修改,是否保存修改或者放棄修改。如:Commit、Rollback、Savepoint、SetTransaction等命令。數(shù)據(jù)控制語言(DCL)數(shù)據(jù)控制語言(DCL)管理對數(shù)據(jù)庫內(nèi)對象的訪問權(quán)限和授予和回收,如Grant、Revoke等等?;維QL語句基本的SQL語句包括DQL和DML。也就是對數(shù)據(jù)庫最常用的四大基本操作:查詢(Select)、插入(Insert)、更新(Update)和刪除(Delete)DQL的3種基本格式1.基本句型一:(最簡單的SELECT語句)SELECT字段名FROM數(shù)據(jù)表例1.SELECT*FROMgrade功能說明:將grade表中的所有字段取出來。例2.SELECT學(xué)號,姓名FROMgrade功能說明:將grade表中學(xué)號和姓名字段取出來。例3.SELECT學(xué)號,姓名,語文+數(shù)學(xué)+英語as總成績FROMgrade功能說明:將grade表中的學(xué)號和姓名取出來,并將語文、數(shù)學(xué)和英語成績相加產(chǎn)生虛擬列總成績。2.基本句型二:使用條件查詢SELECT字段名FROM數(shù)據(jù)表WHERE篩選條件測試句型如下。例1.SELECT*FROMgradeWHERE數(shù)學(xué)>60功能說明:把所有數(shù)學(xué)成績大于60分的記錄選出來。例2.SELECT*FROMgradeWHERE數(shù)學(xué)=300or語文=300功能說明:把數(shù)學(xué)成績等于300分或者語文成績等于300分的人選出來。例3.Like子句基本格式一:“_”匹配。功能說明:每個下劃線匹配一個任意字符,注意只匹配一個字符。比如:姓名like‘_敏’,匹配姓名以“敏”字結(jié)尾且字數(shù)等于二的所有數(shù)據(jù)記錄,如:“張敏”。例4.Like子句基本格式二:“%”匹配。比如:姓名Like'%敏%',匹配姓名中出現(xiàn)“敏”的所有數(shù)據(jù)記錄,如:“周惠敏”,“于敏”、“敏大”、“敏二”等。比如要在數(shù)據(jù)庫中查詢姓江的人,只要利用一條SQL語句就可以了,SELECT*FROM數(shù)據(jù)庫表WHERE姓名Like'江%'。3.基本句型三:(進行排序)SELECT字段名FROM數(shù)據(jù)表ORDERBY字段名測試句型如下。(1)SELECT*FROMgradeORDERBY數(shù)學(xué)注:從低到高排序功能說明:從grade表中取出所有字段,并按數(shù)學(xué)成績排序。(2)SELECT*FROMgradeORDERBY數(shù)學(xué),語文功能說明:從grade表中取出所有字段,并按數(shù)學(xué)成績排序,如果數(shù)學(xué)成績相同則按照語文成績排序。(3)SELECT*FROMgradeORDERBY數(shù)學(xué)desc注:從高到低排序功能說明:從grade表中取出所有字段,并按數(shù)學(xué)成績倒序。(4)SELECTtop5*FROMgrade功能說明:從grade表中取出前五條記錄的所有字段。DML的基本格式(1)DELETE指令:刪除數(shù)據(jù)記錄?;菊Z法:DELETEFROM數(shù)據(jù)表WHERE條件例:DELETEfromgradeWHERE數(shù)學(xué)=0功能說明:刪除所有數(shù)學(xué)成績?yōu)榱愕挠涗?,如果沒有WHERE子句,則刪除所有記錄。(2)UPDATE指令:更新數(shù)據(jù)記錄?;菊Z法:UPDATE數(shù)據(jù)表SET字段值=新值WHERE條件例1:UPDATEgradeSET數(shù)學(xué)=數(shù)學(xué)+10說明:將grade表中所有人的成績加10分例2:UPDATEgradeSET數(shù)學(xué)=100WHERE姓名like'%敏%'功能說明:將姓名中含有敏的人的數(shù)學(xué)成績更新為100分INSERTINTO指令(3)INSERTINTO指令:添加數(shù)據(jù)記錄?;靖袷?:INSERTINTO數(shù)據(jù)表VALUES(字段新值)基本格式2:INSERTINTO數(shù)據(jù)表(字段一,字段二,……)VALUES(字段新值)其中關(guān)鍵字兩種格式的區(qū)別是:當(dāng)values含有數(shù)據(jù)庫表所有字段的值,并且順序和數(shù)據(jù)庫字段一致時,就可以省略數(shù)據(jù)庫表后面的字段名稱。例1:INSERTINTOgrade(學(xué)號,姓名,數(shù)學(xué))VALUES(1234,'周潤發(fā)',70)例2:INSERTINTOgradeVALUES(5678,'周潤發(fā)',70,80,90)功能說明:該語句等價于:INSERTINTOgrade(學(xué)號,姓名,語文,數(shù)學(xué),英語)VALUES(5678,'周潤發(fā)',70,80,90)聚合函數(shù)聚合函數(shù)在信息管理系統(tǒng)經(jīng)常使用,功能是做一些基本的統(tǒng)計和計算。聚合函數(shù)有5個,分別是SUM函數(shù)、AVG函數(shù)、COUNT函數(shù)、MAX函數(shù)和MIN函數(shù)。SUN函數(shù)(1)SUN函數(shù),功能是算出某個字段的總值。例.SELECTSUM(數(shù)學(xué))AsTotalFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績總和,這個數(shù)值的列名為Total。在SQL輸入窗口中輸入,如圖聚合函數(shù)(2)AVG函數(shù),功能是算出某個字段的平均值。例.SELECTAVG(數(shù)學(xué))AsAverageFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績平均分,這個數(shù)值的列名為Average。(3)COUNT函數(shù),功能是算出返回記錄的行數(shù)。例.SELECTCOUNT(*)AsCountsFROMgrade功能說明:求出滿足條件的記錄總數(shù)。(4)MAX函數(shù),功能是算出某個字段的最大值。例.SELECTMAX(數(shù)學(xué))AsFirstFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績的最高分,這個數(shù)值的列名為First。(5)MIN函數(shù),功能是算出某個字段的總值。例.SELECTMIN(數(shù)學(xué))AsLastFROMgrade功能說明:求出所有學(xué)生數(shù)學(xué)成績的最低分,這個數(shù)值的列名為Last。分組查詢分組查詢包括GROUPBY和HAVING關(guān)鍵字。比如計算某班男生女生的數(shù)學(xué)平均分,利用可以利用分組查詢完成。grade表中添加一列“性別”,如person1.mdb庫中的grade表,可以使用“SELECT性別,AVG(數(shù)學(xué))as平均分FROMgradeGROUPBY性別”得到男生和女生的平均分,執(zhí)行的結(jié)果如圖計算所有男生的數(shù)學(xué)平均成績,有兩種方法:(1)SELECT性別,AVG(數(shù)學(xué))as平均分FROMgradeGROUPBY性別HAVING性別='男'(2)SELECT性別,AVG(數(shù)學(xué))as平均分FROMgradeWHERE性別='男'GROUPBY性別分組查詢在使用分組查詢的時候,有4點需要注意。(1)WHERE子句必須放在GROUPBY子句之前。(2)HAVING子句中只能包含分組字段或者聚合函數(shù)。(3)SELECT語句選擇的列只能是分組字段或者聚合函數(shù)。(4)HAVING必須放在GROUPBY子句之后。交叉查詢考慮3個表:學(xué)生表(Student)、課程表(Course)和選課表(SC)表的關(guān)系如圖交叉查詢其中:(1)學(xué)生表中的sno表示學(xué)生學(xué)號,sname表示學(xué)生姓名。(2)課程表中cno表示課程編號,cname表示課程的名稱。(3)選課表中的sno表示學(xué)生學(xué)號,cno表示課程編號。查找選擇課程為“軟件工程”的所有同學(xué)姓名?可以利用如下的SQL語句。SELECTb.snameFROMsca,studentb,coursecWHEREa.cno=c.cno
ANDa.sno=b.snoandc.cname='軟件工程'其中“sca”表示給表sc起個別名為a,同樣“studentb”是給student表起個別名b。該查詢實現(xiàn)了三個表之間的交叉查詢。10.3JDBC的結(jié)構(gòu)
目前,比較常見的JDBC驅(qū)動程序可分為以下4種類型:(1)JDBC-ODBC橋加ODBC驅(qū)動程序:JDBC-ODBC橋產(chǎn)品利用ODBC驅(qū)動程序提供JDBC訪問。在服務(wù)器上必須可以安裝ODBC驅(qū)動程序。(2)本地API:這種類型的驅(qū)動程序把客戶機API上的JDBC調(diào)用轉(zhuǎn)換為Oracle、Sybase、Informix、DB2或其它DBMS的調(diào)用。(3)JDBC網(wǎng)絡(luò)純Java驅(qū)動程序:這種驅(qū)動程序?qū)DBC轉(zhuǎn)換為與DBMS無關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個服務(wù)器轉(zhuǎn)換為一種DBMS協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間件能夠?qū)⑺募僇ava客戶機連接到多種不同的數(shù)據(jù)庫上。(4)本地協(xié)議純Java驅(qū)動程序:這種類型的驅(qū)動程序?qū)DBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議。這將允許從客戶機機器上直接調(diào)用DBMS服務(wù)器,是Intranet訪問的一個很實用的解決方法。第3類和第4類驅(qū)動程序?qū)⒊蔀镴DBC訪問數(shù)據(jù)庫的首選方法。第1類和第2類驅(qū)動程序在直接的純Java驅(qū)動程序還沒有上市前會作為過渡方案來使用。數(shù)據(jù)驅(qū)動程序使用JDBC的第一步是安裝驅(qū)動程序。大多數(shù)數(shù)據(jù)庫都有JDBC驅(qū)動程序,常用的JDBC驅(qū)動程序如圖所示。Connection對象建立是建立與數(shù)據(jù)庫之間的連接,也就是創(chuàng)建一個Connection的實例。DriverManager類的getConnection()方法將建立數(shù)據(jù)庫的連接:publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException在程序的最后,應(yīng)該關(guān)閉Connection對象:publicvoidclose()throwsSQLExceptionStatement對象Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。存在3種Statement對象:(1)Statement;(2)PreparedStatement(從Statement繼承而來);(3)CallableStatement(從PreparedStatement繼承而來)。Statement接口Statement接口提供了兩種執(zhí)行SQL語句的常用方法:publicResultSet
executeQuery(Stringsql)throwsSQLException用于產(chǎn)生單個ResultSet的語句,例如SELECT語句。publicint
executeUpdate(Stringsql)throwsSQLException用于執(zhí)行INSERT、UPDATE或DELETE語句以及SQLDDL語句,例如CREATETABLE和DROPTABLE。該方法返回一個整數(shù),指示受影響的行數(shù)。ResultSet對象ResultSet包含符合SQL語句執(zhí)行結(jié)果所有行,并且它通過一套get方法提供了對這些行中數(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維護指向其當(dāng)前數(shù)據(jù)行的光標,讓光標向下移動一行的方法是:publicbooleannext()throwsSQLException10.4JDBC數(shù)據(jù)源
案例名稱:使用JDBC-ODBC橋讀取Access數(shù)據(jù)庫程序名稱:DbTest1.java案例名稱:使用JDBC-ODBC橋操作Access數(shù)據(jù)庫
程序名稱:DbTest2.java操作Access數(shù)據(jù)庫案例名稱:使用JDBC-ODBC橋讀取Excel數(shù)據(jù)源程序名稱:DbTest3.javaPreparedStatement對象案例名稱:使用PreparedStatement程序名稱:DbTest4.java10.5JDBC數(shù)據(jù)格式根據(jù)JDBC的5個常用對象的功能,可以將數(shù)據(jù)訪問分為4個基本格式。
格式一:執(zhí)行基本SQL語句
案例名稱:數(shù)據(jù)訪問基本格式一
Class.forName("JDBC驅(qū)動程序"); Connectionconn=DriverManager.getConnection("相應(yīng)JDBC驅(qū)動程序的連接串); Statementstmt=conn.createStatement(); ResultSetrs=stmt.executeQuery("DQL語句");//如果是數(shù)據(jù)查詢
stmt.executeUpdate("DML語句");//如果是數(shù)據(jù)操作格式二:實現(xiàn)分頁在JDBC1.0中,結(jié)果只能利用next方法每次向前移動一行。在JDBC2.0中,增加了一類新的結(jié)果集,稱為可滾動結(jié)果集案例名稱:數(shù)據(jù)訪問基本格式二
Class.forName("JDBC驅(qū)動程序"); Connectionconn=DriverManager.getConnection("相應(yīng)JDBC驅(qū)動程序的連接串); 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對象是不可滾動,這是默認值。ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet對象是可滾動的,但是對數(shù)據(jù)庫中修改不敏感。ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet對象是可滾動的,而且對數(shù)據(jù)庫的修改敏感。修改對結(jié)果集的影響類型看到內(nèi)部更新看到內(nèi)部刪除看到內(nèi)部插入看到外部更新看到外部刪除看到外部插入只向前是否否否否否可滾動不敏感是是否否否否可滾動敏感是是否是否否結(jié)果集的并發(fā)性結(jié)果集的并發(fā)性(Concurrency)決定ResultSet對象是否可以修改數(shù)據(jù)庫中的行??梢允褂肦esultSet類中定義的int常量來指定結(jié)果集的并發(fā)性。ResultSet.CONCUR_READ_ONLY,指定ResultSet對象不能修改數(shù)據(jù)庫,默認值。ResultSet.CONCUR_UPDATABLE,指定ResultSet對象可以修改數(shù)據(jù)庫。格式三:執(zhí)行帶參數(shù)的SQL語句案例名稱:數(shù)據(jù)訪問基本格式三
Class.forName("JDBC驅(qū)動程
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度潯購F000353632食品級冰柜采購協(xié)議3篇
- 2025年度個人房產(chǎn)買賣居間代理服務(wù)協(xié)議3篇
- 二零二五年度環(huán)保型打印耗材研發(fā)與銷售合同可打印協(xié)議書下載3篇
- 醫(yī)療技術(shù)產(chǎn)品的研發(fā)與市場應(yīng)用
- 二零二五年度瓷磚行業(yè)環(huán)保公益活動贊助合同3篇
- 未來辦公環(huán)境綠色辦公創(chuàng)業(yè)項目策劃
- 二零二五年度編織袋行業(yè)政策研究與解讀合同3篇
- 2025版顯示屏技術(shù)改造與升級合同3篇
- 湖北2025年湖北武漢理工大學(xué)專職輔導(dǎo)員招聘筆試歷年參考題庫附帶答案詳解
- 2025年度鋼構(gòu)工程鋼結(jié)構(gòu)焊接與檢驗合同協(xié)議
- 2024年鐵嶺衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 電線電纜加工質(zhì)量控制流程
- 山東省淄博市張店區(qū)祥瑞園小學(xué)?-2024-2025年第一學(xué)期一年級班主任經(jīng)驗分享(著眼于愛 著手于細)【課件】
- 企業(yè)內(nèi)部客供物料管理辦法
- 婦科臨床葡萄胎課件
- 醫(yī)務(wù)從業(yè)人員行為規(guī)范培訓(xùn)
- 中小學(xué)校食品安全管理現(xiàn)狀與膳食經(jīng)費優(yōu)化方案
- 藥學(xué)技能競賽標準答案與評分細則處方
- 第15屆-17屆全國中學(xué)生物理競賽預(yù)賽試卷含答案
- 2025屆高考英語 716個閱讀理解高頻詞清單
- 外研版小學(xué)英語(三起點)六年級上冊期末測試題及答案(共3套)
評論
0/150
提交評論