版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 數(shù)據(jù)庫(kù)操作,本章主要內(nèi)容:數(shù)據(jù)庫(kù)概述JDBC的結(jié)構(gòu)JDBC的驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)的連接與操作,第5章 數(shù)據(jù)庫(kù)操作,5.1 數(shù)據(jù)庫(kù)概述5.2 JDBC技術(shù)5.3 連接數(shù)據(jù)庫(kù)5.4 操作數(shù)據(jù)庫(kù),5.1 數(shù)據(jù)庫(kù)概述,5.1.1關(guān)系模型5.1.2結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL,,5.1.1關(guān)系模型,數(shù)據(jù)庫(kù)管理系統(tǒng)是管理數(shù)據(jù)庫(kù)的系統(tǒng),它按一定的數(shù)據(jù)模型組織數(shù)據(jù)。數(shù)據(jù)庫(kù)管理系統(tǒng)采用的數(shù)據(jù)模型主要有:關(guān)系模型、層次模型和網(wǎng)狀模型。
2、關(guān)系模型是目前應(yīng)用最廣的數(shù)據(jù)模型。關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表,它由行和列組成。例如學(xué)生信息登記表。,關(guān)系模型以二維表格(關(guān)系表)的形式組織數(shù)據(jù)庫(kù)中的數(shù)據(jù)。通常把關(guān)系表的結(jié)構(gòu)稱(chēng)為關(guān)系模式。關(guān)系模型的基本概念如下所述。(1)關(guān)系(2)元組(3)屬性(4)主碼(5)域(6)分量(7)關(guān)系模式(8)格式,5.1.1關(guān)系模型,,5.1.2結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL,結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL是用于操作關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,具有數(shù)據(jù)定
3、義、查詢(xún)、更新和控制等多種功能,它使用方便、功能豐富、簡(jiǎn)潔易學(xué)。SQL語(yǔ)言由3部分組成:(1)數(shù)據(jù)定義語(yǔ)言(DDL)(2)數(shù)據(jù)操縱語(yǔ)言(DML)(3)數(shù)據(jù)控制語(yǔ)言(DCL),SQL語(yǔ)言中最常用的命令:1. 創(chuàng)建數(shù)據(jù)庫(kù)CREATE DATABASECREATE DATABASE 數(shù)據(jù)庫(kù)名稱(chēng)2. 創(chuàng)建表CREATE TABLECREATE TABLE 表名稱(chēng) (列名 數(shù)據(jù)類(lèi)型, …)3. 插入數(shù)據(jù)語(yǔ)句INSERTINSE
4、RT INTO 表名 [(字段名表)] VALUES (值表)4. 刪除數(shù)據(jù)語(yǔ)句DELETEDELETE FROM表名 [WHERE 條件],5.1.2結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL,5. 更新數(shù)據(jù)語(yǔ)句UPDATEUPDATE 表名SET 字段名1=值 [,字段名2=值 …] [WHERE 條件]6. 數(shù)據(jù)查詢(xún)SELECTSELECT [DISTINCT] [別名.]字段名或表達(dá)式 [AS 列標(biāo)題]FROM 表或視圖 別名[ WH
5、ERE條件][ GROUP BY 分組表達(dá)式][ ORDER BY 排序表達(dá)式[ ASC | DESC ]] SELECT子句雖然復(fù)雜,但在實(shí)際應(yīng)用中,幾乎不可能同時(shí)遇到這么多選項(xiàng),一般常用的形式是:SELECT [別名.]字段名或表達(dá)式 FROM 表或視圖 別名[WHERE條件],5.1.2結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL,5.2 JDBC技術(shù),5.2.1 JDBC介紹5.2.2 JDBC體系結(jié)構(gòu)5.2.3 JDBC驅(qū)動(dòng)程序
6、5.2.4 JDBC接口,,5.2.1 JDBC介紹,JDBC是一種可用于執(zhí)行SQL語(yǔ)句的Java API(應(yīng)用程序設(shè)計(jì)接口),它由一些Java語(yǔ)言編寫(xiě)的類(lèi)和界面組成。JDBC為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員、數(shù)據(jù)庫(kù)前臺(tái)工具開(kāi)發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使開(kāi)發(fā)人員可以用純Java語(yǔ)言編寫(xiě)完整的數(shù)據(jù)庫(kù)應(yīng)用程序。,通過(guò)使用JDBC,可以很方便地將SQL語(yǔ)句傳送給幾乎任何一種數(shù)據(jù)庫(kù),也就是說(shuō),開(kāi)發(fā)人員可以不必寫(xiě)一個(gè)程序訪問(wèn)Oracle,再寫(xiě)一
7、個(gè)程序訪問(wèn)SQL Server。 簡(jiǎn)單的說(shuō),JDBC能實(shí)現(xiàn)以下3個(gè)功能:(1)同一個(gè)數(shù)據(jù)庫(kù)建立連接。(2)向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句。(3)處理數(shù)據(jù)庫(kù)返回的結(jié)果。,5.2.1 JDBC介紹,5.2.2 JDBC體系結(jié)構(gòu),JDBC的出現(xiàn)使Java程序?qū)Ω鞣N數(shù)據(jù)庫(kù)的訪問(wèn)能力大大增強(qiáng)。JDBC的體系結(jié)構(gòu)如圖所示。,由圖中可以看出,JDBC的體系結(jié)構(gòu)有四個(gè)組件,分別為應(yīng)用程序、JDBC API、JDBC驅(qū)動(dòng)程序管理器和為各種數(shù)據(jù)
8、庫(kù)定制的JDBC驅(qū)動(dòng)程序,提供與不同數(shù)據(jù)庫(kù)的透明連接。其中JDBC API的作用就是屏蔽不同的數(shù)據(jù)庫(kù)間JDBC驅(qū)動(dòng)程序之間的差別,使得程序設(shè)計(jì)人員有一個(gè)標(biāo)準(zhǔn)的、純Java的數(shù)據(jù)庫(kù)程序設(shè)計(jì)接口,為在Java中訪問(wèn)任意類(lèi)型的數(shù)據(jù)庫(kù)提供技術(shù)支持。JDBC驅(qū)動(dòng)程序管理器為應(yīng)用程序裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。JDBC驅(qū)動(dòng)程序與具體的數(shù)據(jù)庫(kù)相關(guān),用于建立與數(shù)據(jù)源的連接,向數(shù)據(jù)庫(kù)提交SQL請(qǐng)求。,5.2.2 JDBC體系結(jié)構(gòu),5.2.3 JDBC驅(qū)動(dòng)程序,J
9、DBC驅(qū)動(dòng)程序按其實(shí)現(xiàn)方式的不同可以分為四種類(lèi)型,不同類(lèi)型的驅(qū)動(dòng)程序有著不一樣的使用方法,所以在連接數(shù)據(jù)庫(kù)之前,必須選擇一種適當(dāng)?shù)尿?qū)動(dòng)程序。1. JDBC-ODBC橋在JDBC剛剛產(chǎn)生時(shí),JDBC-ODBC橋是很有用的。通過(guò)JDBC-ODBC橋,開(kāi)發(fā)者可以使用JDBC來(lái)訪問(wèn)一個(gè)ODBC數(shù)據(jù)源。JDBC-ODBC橋驅(qū)動(dòng)程序?yàn)镴ava應(yīng)用程序提供了一種把JDBC調(diào)用映射為ODBC調(diào)用的方法。,5.2.3 JDBC驅(qū)動(dòng)程序,2. Java
10、到本地API該類(lèi)型的驅(qū)動(dòng)程序把客戶(hù)機(jī)API上的JDBC調(diào)用轉(zhuǎn)換為其他數(shù)據(jù)庫(kù)管理系統(tǒng)的調(diào)用。這也是一種橋驅(qū)動(dòng)程序,它使用Java實(shí)現(xiàn)與數(shù)據(jù)庫(kù)廠商專(zhuān)有的API的混合形式來(lái)提供數(shù)據(jù)訪問(wèn)。JDBC驅(qū)動(dòng)將標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)變?yōu)閷?duì)數(shù)據(jù)庫(kù)API的本地調(diào)用。該驅(qū)動(dòng)程序的工作原理如圖5-3所示。,5.2.3 JDBC驅(qū)動(dòng)程序,3.JDBC網(wǎng)絡(luò)純Java驅(qū)動(dòng)程序這種類(lèi)型的驅(qū)動(dòng)程序?qū)DBC轉(zhuǎn)換為與數(shù)據(jù)庫(kù)管理系統(tǒng)無(wú)關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個(gè)服
11、務(wù)器轉(zhuǎn)換為一種數(shù)據(jù)庫(kù)管理系統(tǒng)協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間件能夠?qū)⑺募僇ava客戶(hù)機(jī)連接到多種不同的數(shù)據(jù)庫(kù)上。所用的具體協(xié)議取決于提供者。該驅(qū)動(dòng)程序的工作原理如圖所示。,5.2.3 JDBC驅(qū)動(dòng)程序,4.Java到本地?cái)?shù)據(jù)庫(kù)協(xié)議該類(lèi)型的驅(qū)動(dòng)程序?qū)DBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議。這種方式使用一個(gè)中間數(shù)據(jù)庫(kù)訪問(wèn)服務(wù)器,通過(guò)這個(gè)服務(wù)器,可以把Java客戶(hù)端連接到多個(gè)數(shù)據(jù)庫(kù)服務(wù)器上。該類(lèi)型的驅(qū)動(dòng)程序最大的好處是省去了在客戶(hù)端安裝
12、任何驅(qū)動(dòng)程序的麻煩,只要在服務(wù)器端安裝好數(shù)據(jù)訪問(wèn)中間服務(wù)器,中間服務(wù)器會(huì)負(fù)責(zé)所有存取數(shù)據(jù)庫(kù)時(shí)的必要的轉(zhuǎn)換。該驅(qū)動(dòng)程序的工作原理如圖所示。,,5.2.3 JDBC驅(qū)動(dòng)程序,對(duì)于以上四類(lèi)驅(qū)動(dòng)程序的選擇,需要考慮構(gòu)建應(yīng)用程序的實(shí)際需要。一般建議不使用橋驅(qū)動(dòng)程序,即第1、2類(lèi)驅(qū)動(dòng)程序,它們主要是作為純Java驅(qū)動(dòng)程序還沒(méi)有上市之前的過(guò)渡方案來(lái)使用,效率相對(duì)較低,程序的可移植性差。而第3、4類(lèi)驅(qū)動(dòng)程序是從JDBC訪問(wèn)數(shù)據(jù)庫(kù)的首選方法,它們不但使
13、程序的可移植性提高,達(dá)到跨平臺(tái)的目的,還省去了在客戶(hù)端安裝驅(qū)動(dòng)程序的麻煩。,5.2.4 JDBC接口,JDBC的接口分為兩個(gè)層次,一個(gè)是面向程序開(kāi)發(fā)人員的JDBC API,另一個(gè)是底層的JDBC Driver API。1.面向程序開(kāi)發(fā)人員的JDBC APIJDBC API被描述成為一組抽象的Java接口,使得應(yīng)用程序可以對(duì)某個(gè)數(shù)據(jù)庫(kù)打開(kāi)連接,執(zhí)行SQL語(yǔ)句并處理結(jié)果。JDBC API主要包括以下接口。1)java.sql.Dri
14、verManager2)java.sql.Connection3)java.sql.Statement4)java.sql.ResultSet,2.JDBC Driver APIJDBC Driver API是面向驅(qū)動(dòng)程序開(kāi)發(fā)商的編程接口。對(duì)于大多數(shù)數(shù)據(jù)驅(qū)動(dòng)程序來(lái)說(shuō),僅實(shí)現(xiàn)JDBC API提供的抽象類(lèi)就可以了。也就是說(shuō),每個(gè)驅(qū)動(dòng)程序都必須提供對(duì)于java.sql.Connection、java.sql.Statement、jav
15、a.sql.PreparedStatement和java.sql.ResultSet等主要接口的實(shí)現(xiàn)方法。如果目標(biāo)DBMS提供有OUT參數(shù)的內(nèi)嵌過(guò)程,那么還必須提供java.sql.CallableStatement接口。當(dāng)java.sql.DriverManager需要為一個(gè)特定的數(shù)據(jù)庫(kù)URL加載驅(qū)動(dòng)程序時(shí),每個(gè)驅(qū)動(dòng)程序就需要提供一個(gè)能實(shí)現(xiàn)java.sql.Driver接口的類(lèi)。,5.2.4 JDBC接口,5.3 連接數(shù)據(jù)庫(kù),5.3.
16、1 JDBC連接SQL Server數(shù)據(jù)庫(kù)5.3.2 JDBC-ODBC連接Access數(shù)據(jù)庫(kù),5.3.1 JDBC連接SQL Server數(shù)據(jù)庫(kù),在JSP中,用戶(hù)可以使用JDBC-ODBC橋驅(qū)動(dòng)程序連接SQL Server數(shù)據(jù)庫(kù),也可以使用JDBC的驅(qū)動(dòng)程序Microsoft SQL Server2000 Driver for JDBC來(lái)直接連接。這里以第二種方法為例介紹JSP與SQL Server數(shù)據(jù)庫(kù)的連接。1.下載并安裝JD
17、BC驅(qū)動(dòng)程序2.加載驅(qū)動(dòng)程序3.創(chuàng)建指定數(shù)據(jù)庫(kù)的URL4.建立與數(shù)據(jù)庫(kù)的連接5.訪問(wèn)數(shù)據(jù)庫(kù)6.關(guān)閉數(shù)據(jù)庫(kù)連接,釋放資源,5.3.2 JDBC-ODBC連接Access數(shù)據(jù)庫(kù),由于目前JDBC還不能實(shí)現(xiàn)對(duì)所有數(shù)據(jù)庫(kù)的直接訪問(wèn),因?yàn)椴皇撬械臄?shù)據(jù)庫(kù)提供商都提供JDBC驅(qū)動(dòng)程序,例如Access,所以JSP訪問(wèn)Access就只能通過(guò)JDBC-ODBC橋,使用ODBC驅(qū)動(dòng)程序?qū)崿F(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。1.加載驅(qū)動(dòng)程序在JDBC連接到OD
18、BC數(shù)據(jù)庫(kù)之前,必須加載JDBC-ODBC橋的驅(qū)動(dòng)程序,代碼如下。Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")該語(yǔ)句使用了Class類(lèi)(java.lang包)中的方法forName載入該驅(qū)動(dòng)程序的類(lèi)“sun.jdbc.odbc.JdbcOdbcDriver”,從而創(chuàng)建了該驅(qū)動(dòng)程序的一個(gè)實(shí)例。,5.3.2 JDBC-ODBC連接Access數(shù)據(jù)庫(kù),2.創(chuàng)建數(shù)據(jù)庫(kù)連接加載
19、JDBC-ODBC橋的驅(qū)動(dòng)程序后,就可以連接數(shù)據(jù)庫(kù)了。首先創(chuàng)建一個(gè)Connection(java.lang包)類(lèi)的一個(gè)實(shí)例“conn”,并使用DriverManager方法的getConnection來(lái)測(cè)試使用“url”指定的數(shù)據(jù)庫(kù)連接。創(chuàng)建數(shù)據(jù)庫(kù)連接的代碼如下。String url="jdbc:odbc:dataname";String user="";String password=&quo
20、t;";conn=DriverManager.getConnection(url,uesr,password);,5.3.2 JDBC-ODBC連接Access數(shù)據(jù)庫(kù),3.訪問(wèn)數(shù)據(jù)庫(kù)使用Connection類(lèi)對(duì)象的createStatement方法從指定的數(shù)據(jù)庫(kù)連接得到一個(gè)Statement的實(shí)例“stmt”,然后使用這個(gè)實(shí)例的executeQuery()方法來(lái)執(zhí)行SQL語(yǔ)句,并將查詢(xún)結(jié)果保存到ResultSet對(duì)象“rs”
21、中。其代碼如下:stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet rs = stmt.executeQuery(String sql);,5.3.2 JDBC-ODBC連接Access數(shù)據(jù)庫(kù),4.關(guān)閉數(shù)據(jù)庫(kù)連接,釋放資源對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)結(jié)束后,及時(shí)地關(guān)閉ResultSet對(duì)象、Statem
22、ent對(duì)象和Connection對(duì)象,從而釋放所占的資源,實(shí)現(xiàn)代碼與連接SQL Server一樣。,5.4 操作數(shù)據(jù)庫(kù),5.4.1 數(shù)據(jù)查詢(xún)5.4.2 數(shù)據(jù)更新5.4.3 數(shù)據(jù)刪除,5.4.1數(shù)據(jù)查詢(xún),在實(shí)際應(yīng)用中,經(jīng)常需要從數(shù)據(jù)庫(kù)中查詢(xún)某些特定的數(shù)據(jù)信息,如學(xué)號(hào)為1002的學(xué)生信息、地點(diǎn)在北京的倉(cāng)庫(kù)信息等。要實(shí)現(xiàn)指定數(shù)據(jù)信息的查詢(xún),需要給出一個(gè)參數(shù),然后再利用SQL語(yǔ)句就可以將數(shù)據(jù)信息從數(shù)據(jù)庫(kù)中查詢(xún)出來(lái)。,5.4.2 數(shù)據(jù)更新,數(shù)
23、據(jù)更新操作包括修改數(shù)據(jù)、添加數(shù)據(jù)、刪除數(shù)據(jù)。在數(shù)據(jù)庫(kù)的維護(hù)過(guò)程中經(jīng)常需要修改數(shù)據(jù)表中的記錄信息,如在學(xué)生管理系統(tǒng)中要修改學(xué)生的姓名、年齡等。通常是通過(guò)以下兩個(gè)步驟來(lái)實(shí)現(xiàn)數(shù)據(jù)的更新。1)創(chuàng)建語(yǔ)句對(duì)象Statement stmt=conn.createStatement(int type,int concurrency ) ;2)執(zhí)行更新String sql="sqlStatement " ; int n
24、umber=stmt.executeUpdate(sql;,5.4.3 數(shù)據(jù)刪除,在數(shù)據(jù)庫(kù)的維護(hù)過(guò)程中,經(jīng)常要?jiǎng)h除一些已經(jīng)沒(méi)用的記錄?!纠縿h除學(xué)生表stu_info中的記錄。本例包括三個(gè)JSP頁(yè)面,程序運(yùn)行時(shí)首先在del_1.jsp頁(yè)面中選擇要?jiǎng)h除的學(xué)號(hào),程序?qū)⑦x擇的id參數(shù)提交到del_2.jsp頁(yè)面,此頁(yè)面根據(jù)傳過(guò)來(lái)的id參數(shù)取出該學(xué)生的詳細(xì)信息記錄,確定確實(shí)要?jiǎng)h除該學(xué)生信息后,將id參數(shù)提交到del_3.jsp頁(yè)面,最后由d
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 3 數(shù)據(jù)庫(kù)第2章第5題解答
- 第7章數(shù)據(jù)庫(kù)
- 第5章數(shù)據(jù)庫(kù)的創(chuàng)建和管理
- 數(shù)據(jù)庫(kù)第12章 數(shù)據(jù)庫(kù)技術(shù)新進(jìn)展
- 第3章創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)文件
- 高級(jí)數(shù)據(jù)庫(kù)技術(shù)-第7章_移動(dòng)數(shù)據(jù)庫(kù)
- 《數(shù)據(jù)庫(kù)》第章習(xí)題答案
- 4 數(shù)據(jù)庫(kù)第3章第3、4、5題解答
- 第4章 數(shù)據(jù)庫(kù)與表的創(chuàng)建和操作2
- 第2章-數(shù)據(jù)庫(kù)和表的基本操作(教學(xué)設(shè)計(jì))
- 第4章 數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)
- 第7章數(shù)據(jù)庫(kù)系統(tǒng)-
- 第4章數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)
- 第10章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
- 數(shù)據(jù)庫(kù)操作及認(rèn)識(shí)數(shù)據(jù)庫(kù)
- 9數(shù)據(jù)庫(kù)操作
- 數(shù)據(jù)庫(kù)加鎖操作
- 第6章___access數(shù)據(jù)庫(kù)實(shí)例開(kāi)發(fā)
- 第1章 數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)
- 第3章 數(shù)據(jù)庫(kù)創(chuàng)建與管理
評(píng)論
0/150
提交評(píng)論