Java数据库应用课件_第1页
Java数据库应用课件_第2页
Java数据库应用课件_第3页
Java数据库应用课件_第4页
Java数据库应用课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java資料庫應用

10.1資料庫應用開發簡介作為有效的數據存儲和組織管理工具,資料庫的應用日益廣泛目前主流的資料庫產品有Oracle、SQLServer、DB2和SyBase等多種。在資料庫開發領域中,有三個方面需要掌握:SQL語言、ODBC數據訪問介面和JDBC資料庫訪問介面。SQL語言SQL(StructuredQueryLanguage)是使用關係模型的資料庫語言,用於和各類資料庫連接,提供通用的數據管理和查詢功能。SQL語言最初由IBM公司開發,實現了關係資料庫中的資訊檢索。後幾經修改和完善,被國際標準化組織確定為國際標準,目前執行的是1992年制定的SQL-92標準。SQL可以為各種支持SQL-92標準的資料庫管理系統(DBMS)所接受和處理,通常各種DBMS都提供圖形用戶介面,以使用戶直接對數據庫進行操作。但SQL語言本身並不是完整的編程語言,還需要與其他高級編程語言配合,才能實現應用程式對數據庫的訪問操作。ODBC數據訪問介面開放式資料庫互連ODBC(OpenDataBaseConnectivity)是微軟公司開發的一套開發資料庫系統應用程式介面規範,它支持應用程式以標準的ODBC函數和SQL語句操作各種不同的資料庫。JDBC數據訪問介面為支持Java程式的資料庫操作功能,Java語言採用了專門Java資料庫編程介面(JDBC,JavaDataBaseConnectivity),用於在Java程式中實現資料庫操作功能並簡化操作過程。JDBC支持基本SQL語句,提供多樣化的資料庫連接方式,為各種不同的資料庫提供統一的操作介面10.2SQL語言概述SQL(StructuredQueryLanguage)是關係型資料庫的標準語言,是由國際標準組織提出的,各種關係型資料庫都支持SQL指令,Oracle在基本的SQL基礎上進行了擴充。SQL語句有如下的兩大特點(1)SQL是一種類似於英語的語言,很容易理解和書寫。(2)SQL語言是非過程化的語言(第四代語言)。SQL集DDL(DataDefinitionLanguage:數據定義語言),DML(DataManipulationLanguage:數據操作語言)和DCL(DataControlLanguage:數據控制語言)於一體。用SQL語言可以實現資料庫生命週期的全部活動。SQL語句分類SQL分類描述數據定義語言(DDL)數據定義語言(DDL)用於定義、修改或者刪除資料庫對象,如CreateTable等數據操縱語言(DQL)數據查詢語句(DataQueryLanguage,DQL)用於對數據進行檢索。如最常用的Select語句數據操縱語言(DML)數據操縱語言(DML)用於訪問、建立或者操縱在資料庫中已經存在數據,如Select、Insert、Update和Delete等等。事務控制語言(TCL)事務控制語言(TransactControlLanguage)管理DML語句所做的修改,是否保存修改或者放棄修改。如:Commit、Rollback、Savepoint、SetTransaction等命令。數據控制語言(DCL)數據控制語言(DCL)管理對數據庫內對象的訪問許可權和授予和回收,如Grant、Revoke等等。基本SQL語句基本的SQL語句包括DQL和DML。也就是對數據庫最常用的四大基本操作:查詢(Select)、插入(Insert)、更新(Update)和刪除(Delete)DQL的3種基本格式1.基本句型一:(最簡單的SELECT語句)SELECT字段名FROM數據表例1.SELECT*FROMgrade功能說明:將grade表中的所有字段取出來。例2.SELECT學號,姓名FROMgrade功能說明:將grade表中學號和姓名字段取出來。例3.SELECT學號,姓名,語文+數學+英語as總成績FROMgrade功能說明:將grade表中的學號和姓名取出來,並將語文、數學和英語成績相加產生虛擬列總成績。2.基本句型二:使用條件查詢SELECT字段名FROM數據表WHERE篩選條件測試句型如下。例1.SELECT*FROMgradeWHERE數學>60功能說明:把所有數學成績大於60分的記錄選出來。例2.SELECT*FROMgradeWHERE數學=300or語文=300功能說明:把數學成績等於300分或者語文成績等於300分的人選出來。例3.Like子句基本格式一:“_”匹配。功能說明:每個下劃線匹配一個任意字元,注意只匹配一個字元。比如:姓名like‘_敏’,匹配姓名以“敏”字結尾且字數等於二的所有數據記錄,如:“張敏”。例4.Like子句基本格式二:“%”匹配。比如:姓名Like'%敏%',匹配姓名中出現“敏”的所有數據記錄,如:“周惠敏”,“於敏”、“敏大”、“敏二”等。比如要在資料庫中查詢姓江的人,只要利用一條SQL語句就可以了,SELECT*FROM資料庫表WHERE姓名Like'江%'。3.基本句型三:(進行排序)SELECT字段名FROM數據表ORDERBY字段名測試句型如下。(1)SELECT*FROMgradeORDERBY數學注:從低到高排序功能說明:從grade表中取出所有字段,並按數學成績排序。(2)SELECT*FROMgradeORDERBY數學,語文功能說明:從grade表中取出所有字段,並按數學成績排序,如果數學成績相同則按照語文成績排序。(3)SELECT*FROMgradeORDERBY數學desc注:從高到低排序功能說明:從grade表中取出所有字段,並按數學成績倒序。(4)SELECTtop5*FROMgrade功能說明:從grade表中取出前五條記錄的所有字段。DML的基本格式(1)DELETE指令:刪除數據記錄。基本語法:DELETEFROM數據表WHERE條件例:DELETEfromgradeWHERE數學=0功能說明:刪除所有數學成績為零的記錄,如果沒有WHERE子句,則刪除所有記錄。(2)UPDATE指令:更新數據記錄。基本語法:UPDATE數據表SET字段值=新值WHERE條件例1:UPDATEgradeSET數學=數學+10說明:將grade表中所有人的成績加10分例2:UPDATEgradeSET數學=100WHERE姓名like'%敏%'功能說明:將姓名中含有敏的人的數學成績更新為100分INSERTINTO指令(3)INSERTINTO指令:添加數據記錄。基本格式1:INSERTINTO數據表VALUES(字段新值)基本格式2:INSERTINTO數據表(字段一,字段二,……)VALUES(字段新值)其中關鍵字兩種格式的區別是:當values含有資料庫表所有字段的值,並且順序和數據庫字段一致時,就可以省略資料庫表後面的字段名稱。例1:INSERTINTOgrade(學號,姓名,數學)VALUES(1234,'周潤發',70)例2:INSERTINTOgradeVALUES(5678,'周潤發',70,80,90)功能說明:該語句等價於:INSERTINTOgrade(學號,姓名,語文,數學,英語)VALUES(5678,'周潤發',70,80,90)聚合函數聚合函數在資訊管理系統經常使用,功能是做一些基本的統計和計算。聚合函數有5個,分別是SUM函數、AVG函數、COUNT函數、MAX函數和MIN函數。SUN函數(1)SUN函數,功能是算出某個字段的總值。例.SELECTSUM(數學)AsTotalFROMgrade功能說明:求出所有學生數學成績總和,這個數值的列名為Total。在SQL輸入窗口中輸入,如圖聚合函數(2)AVG函數,功能是算出某個字段的平均值。例.SELECTAVG(數學)AsAverageFROMgrade功能說明:求出所有學生數學成績平均分,這個數值的列名為Average。(3)COUNT函數,功能是算出返回記錄的行數。例.SELECTCOUNT(*)AsCountsFROMgrade功能說明:求出滿足條件的記錄總數。(4)MAX函數,功能是算出某個字段的最大值。例.SELECTMAX(數學)AsFirstFROMgrade功能說明:求出所有學生數學成績的最高分,這個數值的列名為First。(5)MIN函數,功能是算出某個字段的總值。例.SELECTMIN(數學)AsLastFROMgrade功能說明:求出所有學生數學成績的最低分,這個數值的列名為Last。分組查詢分組查詢包括GROUPBY和HAVING關鍵字。比如計算某班男生女生的數學平均分,利用可以利用分組查詢完成。grade表中添加一列“性別”,如person1.mdb庫中的grade表,可以使用“SELECT性別,AVG(數學)as平均分FROMgradeGROUPBY性別”得到男生和女生的平均分,執行的結果如圖計算所有男生的數學平均成績,有兩種方法:(1)SELECT性別,AVG(數學)as平均分FROMgradeGROUPBY性別HAVING性別='男'(2)SELECT性別,AVG(數學)as平均分FROMgradeWHERE性別='男'GROUPBY性別分組查詢在使用分組查詢的時候,有4點需要注意。(1)WHERE子句必須放在GROUPBY子句之前。(2)HAVING子句中只能包含分組字段或者聚合函數。(3)SELECT語句選擇的列只能是分組字段或者聚合函數。(4)HAVING必須放在GROUPBY子句之後。交叉查詢考慮3個表:學生表(Student)、課程表(Course)和選課表(SC)表的關係如圖交叉查詢其中:(1)學生表中的sno表示學生學號,sname表示學生姓名。(2)課程表中cno表示課程編號,cname表示課程的名稱。(3)選課表中的sno表示學生學號,cno表示課程編號。查找選擇課程為“軟體工程”的所有同學姓名?可以利用如下的SQL語句。SELECTb.snameFROMsca,studentb,coursecWHEREa.cno=c.cno

ANDa.sno=b.snoandc.cname='軟體工程'其中“sca”表示給表sc起個別名為a,同樣“studentb”是給student表起個別名b。該查詢實現了三個表之間的交叉查詢。10.3JDBC的結構

目前,比較常見的JDBC驅動程式可分為以下4種類型:(1)JDBC-ODBC橋加ODBC驅動程式:JDBC-ODBC橋產品利用ODBC驅動程式提供JDBC訪問。在伺服器上必須可以安裝ODBC驅動程式。(2)本地API:這種類型的驅動程式把客戶機API上的JDBC調用轉換為Oracle、Sybase、Informix、DB2或其他DBMS的調用。(3)JDBC網路純Java驅動程式:這種驅動程式將JDBC轉換為與DBMS無關的網路協議,之後這種協議又被某個伺服器轉換為一種DBMS協議。這種網路伺服器中間件能夠將它的純Java客戶機連接到多種不同的資料庫上。(4)本地協議純Java驅動程式:這種類型的驅動程式將JDBC調用直接轉換為DBMS所使用的網路協議。這將允許從客戶機機器上直接調用DBMS伺服器,是Intranet訪問的一個很實用的解決方法。第3類和第4類驅動程式將成為JDBC訪問資料庫的首選方法。第1類和第2類驅動程式在直接的純Java驅動程式還沒有上市前會作為過渡方案來使用。數據驅動程式使用JDBC的第一步是安裝驅動程式。大多數資料庫都有JDBC驅動程式,常用的JDBC驅動程式如圖所示。Connection對象建立是建立與資料庫之間的連接,也就是創建一個Connection的實例。DriverManager類的getConnection()方法將建立資料庫的連接:publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException在程式的最後,應該關閉Connection對象:publicvoidclose()throwsSQLExceptionStatement對象Statement對象用於將SQL語句發送到資料庫中。存在3種Statement對象:(1)Statement;(2)PreparedStatement(從Statement繼承而來);(3)CallableStatement(從PreparedStatement繼承而來)。Statement介面Statement介面提供了兩種執行SQL語句的常用方法:publicResultSet

executeQuery(Stringsql)throwsSQLException用於產生單個ResultSet的語句,例如SELECT語句。publicint

executeUpdate(Stringsql)throwsSQLException用於執行INSERT、UPDATE或DELETE語句以及SQLDDL語句,例如CREATETABLE和DROPTABLE。該方法返回一個整數,指示受影響的行數。ResultSet對象ResultSet包含符合SQL語句執行結果所有行,並且它通過一套get方法提供了對這些行中數據的訪問,常用的get方法有:int

getInt(int

columnIndex),取得當前行中第columnIndex列的整數的值。int

getInt(StringcolumnName),取得當前行中列名為columnName的整數的值。DategetDate(int

columnIndex),取得當前行中第columnIndex列的日期的值。DategetDate(StringcolumnName),取得當前行中列名為columnName的日期的值。publicStringgetString(int

columnIndex),取得當前行中第columnIndex列的字串的值。publicStringgetString(StringcolumnName),取得當前行中列名為columnName的字串的值。其他類型的get方法可以參考java文檔。ResultSet維護指向其當前數據行的游標,讓游標向下移動一行的方法是:publicbooleannext()throwsSQLException10.4JDBC數據源

案例名稱:使用JDBC-ODBC橋讀取Access資料庫程式名稱:DbTest1.java案例名稱:使用JDBC-ODBC橋操作Access資料庫

程式名稱:DbTest2.java操作Access資料庫案例名稱:使用JDBC-ODBC橋讀取Excel數據源程式名稱:DbTest3.javaPreparedStatement對象案例名稱:使用PreparedStatement程式名稱:DbTest4.java10.5JDBC數據格式根據JDBC的5個常用對象的功能,可以將數據訪問分為4個基本格式。

格式一:執行基本SQL語句

案例名稱:數據訪問基本格式一

Class.forName("JDBC驅動程式"); Connectionconn=DriverManager.getConnection("相應JDBC驅動程式的連接串); Statementstmt=conn.createStatement(); ResultSetrs=stmt.executeQuery("DQL語句");//如果是數據查詢

stmt.executeUpdate("DML語句");//如果是數據操作格式二:實現分頁在JDBC1.0中,結果只能利用next方法每次向前移動一行。在JDBC2.0中,增加了一類新的結果集,稱為可滾動結果集案例名稱:數據訪問基本格式二

Class.forName("JDBC驅動程式"); Connectionconn=DriverManager.getConnection("相應JDBC驅動程式的連接串); Statementstmt=connect.createStatement(結果集類型,結果集併發性);

ResultSet

rs=stmt.executeQuery("DQL語句");//如果是數據查詢

stmt.executeUpdate("DML語句");//如果是數據操作結果集類型結果集類型有3種:ResultSet.TYPE_FORWORD_ONLY:指定ResultSet對象是不可滾動,這是默認值。ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet對象是可滾動的,但是對數據庫中修改不敏感。ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet對象是可滾動的,而且對數據庫的修改敏感。修改對結果集的影響類型看到內部更新看到內部刪除看到內部插入看到外部更新看到外部刪除看到外部插入只向前是否否否否否可滾動不敏感是是否否否否可滾動敏感是是否是否否結果集的併發性結果集的併發性(Concurrency)決定ResultSet對象是否可以修改資料庫中的行。可以使用ResultSet類中定義的int常量來指定結果集的併發性。ResultSet.CONCUR_READ_ONLY,指定ResultSet對象不能修改資料庫,默認值。ResultSet.CONCUR_UPDATABLE,指定ResultSet對象可以修改資料庫。格式三:執行帶參數的SQL語句案例名稱:數據訪問基本格式三

Class.forName("JDBC驅動程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论