




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章Java與數(shù)據(jù)庫的連接2023/2/4
*1深入了解JDBC訪問各種數(shù)據(jù)庫的驅(qū)動程序的模式熟練掌握利用JDBC訪問數(shù)據(jù)庫的步驟熟練掌握J(rèn)DBC完成各種數(shù)據(jù)庫操作熟練掌握J(rèn)avaAPI來編寫數(shù)據(jù)庫應(yīng)用程序///ysj/hljdxb/
本章學(xué)習(xí)要點(diǎn)2023/2/4
*第2頁10.1JDBC概述2023/2/4
*310.1.1JBDC的用途
JDBC即Java數(shù)據(jù)庫連接(JavaDatabaseConnectivity)。JDBC為數(shù)據(jù)庫及其工具開發(fā)人員提供了一個標(biāo)準(zhǔn)的API,使他們能夠用純JavaAPI來編寫數(shù)據(jù)庫應(yīng)用程序。在JDK的早期版本中,JDBC只是一個可選部件,到了JDK1.1公布時,SQL類包(也就是JDBCAPI)就成為Java語言的標(biāo)準(zhǔn)部件。JDBC擴(kuò)展了Java的功能。例如,使用Java和JDBCAPI可以發(fā)布含有Applet的網(wǎng)頁,而該Applet的信息可能來自遠(yuǎn)程數(shù)據(jù)庫。使用JDBC,使信息的管理和傳播變得容易和經(jīng)濟(jì)。
2023/2/4
*第4頁10.1.2從ODBC到JDBC1.ODBC的結(jié)構(gòu)模型
ODBC的結(jié)構(gòu)包括4個主要部分:應(yīng)用程序接口、驅(qū)動程序管理器、數(shù)據(jù)庫驅(qū)動程序和數(shù)據(jù)源?!?yīng)用程序接口:屏蔽不同的ODBC數(shù)據(jù)庫驅(qū)動程序之間函數(shù)調(diào)用的差別,為用戶提供統(tǒng)一的SQL編程接口?!を?qū)動程序管理器:為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動程序?!?shù)據(jù)庫驅(qū)動程序:實(shí)現(xiàn)ODBC的函數(shù)調(diào)用,提供對特定數(shù)據(jù)源的SQL請求。如果需要,數(shù)據(jù)庫驅(qū)動程序?qū)⑿薷膽?yīng)用程序的請求,使得請求符合相關(guān)的DBMS所支持的文法。·數(shù)據(jù)源:由用戶想要存取的數(shù)據(jù)以及與它相關(guān)的操作系統(tǒng)、DBMS和用于訪問DBMS的網(wǎng)絡(luò)平臺組成。2023/2/4
*第5頁10.1.2從ODBC到JDBC2.JDBC的誕生Java剛誕生時,由于沒有一個Java語言的數(shù)據(jù)庫API,編程人員不得不在Java程序中加入C語言的ODBC函數(shù)調(diào)用。這就使Java的很多優(yōu)秀特性無法充分發(fā)揮,如平臺無關(guān)性、面向?qū)ο筇匦缘?。隨著Java語言訪問數(shù)據(jù)庫的應(yīng)用越來越多,對Java語言訪問數(shù)據(jù)庫API接口的要求也越來越強(qiáng)烈。由于ODBC有其不足之處,如它不容易使用、沒有面向?qū)ο蟮奶匦缘龋蚨鳶UN公司開發(fā)了一套Java語言的數(shù)據(jù)庫應(yīng)用程序開發(fā)接口。在JDK的早期版本中,JDBC只是一個可選部件,到JDK1.1公布時,SQL類包(即JDBCAPI)就成為Java語言的標(biāo)準(zhǔn)部件。2023/2/4
*第6頁10.1.3JDBC的實(shí)現(xiàn)及其驅(qū)動程序1.專用網(wǎng)絡(luò)協(xié)議的驅(qū)動程序與數(shù)據(jù)庫直接通信這種實(shí)現(xiàn)方法是直接使用數(shù)據(jù)庫廠商提供的、用專用網(wǎng)絡(luò)協(xié)議創(chuàng)建的驅(qū)動程序,通過它可以直接將JDBCAPI調(diào)用轉(zhuǎn)換為網(wǎng)絡(luò)調(diào)用,其結(jié)構(gòu)如圖所示。這種調(diào)用方式一般性能比較好,而且也是最簡單實(shí)用的方法。因?yàn)樗恍枰惭b其他的庫程序或者中間件,幾乎所有的數(shù)據(jù)庫廠商都為他們的數(shù)據(jù)庫提供了這種JDBC驅(qū)動程序,也可以從第三方廠商獲得這些驅(qū)動程序。從網(wǎng)址/products/jdbc/drivers/可以看到所有可用驅(qū)動程序的清單。應(yīng)用程序JDBCAPI驅(qū)動程序數(shù)據(jù)源2023/2/4
*第7頁10.1.3JDBC的實(shí)現(xiàn)及其驅(qū)動程序2.通過JDBC-ODBC橋與ODBC數(shù)據(jù)源通信作為JDBC的一部分,SUN公司還發(fā)行了一個用于訪問ODBC數(shù)據(jù)源的驅(qū)動程序,稱為JDBC-ODBC橋接器。它是用jdbcodbc.c1ass和一個用于訪問ODBC驅(qū)動程序的本地庫來實(shí)現(xiàn)的。該本地庫是一個動態(tài)連接庫DLL(JDBCODBC.DLL)。這個驅(qū)動程序把JDBC的方法映射到ODBC調(diào)用上,這樣,JDBC就可以和任何可用的ODBC驅(qū)動程序進(jìn)行交互。它使JDBC目前有能力訪問幾乎所有的數(shù)據(jù)庫。應(yīng)用程序JDBCAPIJDBC-ODBCODBC層ODBCAPI數(shù)據(jù)源2023/2/4
*第8頁10.1.3JDBC的實(shí)現(xiàn)及其驅(qū)動程序3.通過部分專用的驅(qū)動程序與數(shù)據(jù)庫通信這種方式的特點(diǎn)是將JDBC數(shù)據(jù)庫調(diào)用直接翻譯為廠商專用的API,與上述的JDBC-ODBC橋接器相比,它的執(zhí)行更有效、更快捷,其模式如圖所示。應(yīng)用程序JDBCAPI驅(qū)動程序數(shù)據(jù)源專用API4.這種JDBC是純Java的,直接與數(shù)據(jù)庫實(shí)例交互。JavaAPI---JDBC----數(shù)據(jù)庫協(xié)議----數(shù)據(jù)庫2023/2/4
*第9頁10.3JDBCAPI介紹2023/2/4
*1010.3JDBCAPI介紹
JDBCAPI所有的類和接口都集中在Java.sql和Javax.sql這兩個包中。
Java.sql這個包中包含的類和接口采用的是傳統(tǒng)的C/S體系結(jié)構(gòu)。它的功能主要針對的是基本數(shù)據(jù)庫編程服務(wù),如生成連接、執(zhí)行語句以及準(zhǔn)備語句和運(yùn)行批處理查詢等。也有一些其它的高級功能。Javax.sql它與Java.sql相比,引入了一些JDBC編程方面的主要的體系結(jié)構(gòu)的改變,并且為連接管理、分布式事務(wù)處理和連接提供了更好的抽象。同時,這個包還引入了容器管理的連接緩沖池、分布式事務(wù)處理和行集(rowset)等機(jī)制。2023/2/4
*第11頁10.3JDBCAPI介紹編寫簡單JDBC程序的基本步驟:2023/2/4
*第12頁10.3.1連接管理要編寫一個JDBC程序,首先應(yīng)該將它與數(shù)據(jù)庫進(jìn)行連接。在連接管理這一組中,主要有下面2個類和2個接口?!ava.sql.DriverManager這個類提供了用于管理一個或多個數(shù)據(jù)庫驅(qū)動程序。每個驅(qū)動程序都可以連接特定的數(shù)據(jù)庫?!ava.sql.DriverPropertyInfo由于每個數(shù)據(jù)庫都需要一組屬性以獲得一條連接,這個類可用于查找連接所需要的屬性?!ava.sql.Driver這是一個抽象了廠商專用連接協(xié)議的接口,可從數(shù)據(jù)庫的生產(chǎn)廠商或第三方廠商獲得該接口的實(shí)現(xiàn)?!ava.sql.Connection這個接口抽象了大部分與數(shù)據(jù)庫的交互活動。通過一條連接,可以向數(shù)據(jù)庫發(fā)送SQL語句以及讀取執(zhí)行的結(jié)果。2023/2/4
*第13頁10.3.2數(shù)據(jù)庫訪問當(dāng)建立連接后,可以發(fā)送SQL語句訪問數(shù)據(jù)庫和讀取訪問的結(jié)果。·java.sql.Statement
這個接口可在基層連接上執(zhí)行SQL語句并訪問返回結(jié)果?!?/p>
java.sql.PreparedStatement
這是java.sql.Statement接口的一個變種,可以使用參數(shù)化SQL語句?!ava.sql.CallableStatement
這個接口可運(yùn)行存儲過程?!ava.sql.ResultSet這個接口抽象了運(yùn)行SQLselect語句的結(jié)果。它提供了訪問結(jié)果的方法??梢允褂眠@個接口來訪問各記錄中不同的字段。2023/2/4
*第14頁10.4JDBCAPI的使用方法2023/2/4
*1510.4.1JDBCAPI工具1.注冊數(shù)據(jù)庫的驅(qū)動程序(driver)DriverManager.registerDriver():該方法用于為DriverManager對象注冊特定的Driver對象。DriverManager類的方法利用已注冊的驅(qū)動器表,確定是否可以連接到某數(shù)據(jù)庫的URL地址。Class.forName:通過調(diào)用方法Class.forName顯式地加載驅(qū)動程序類。由于這個調(diào)用與外部設(shè)置無關(guān),因此推薦使用這種加載驅(qū)動程序的方法。以下代碼加載類acme.db.Driver:
Class.forName("acme.db.Driver");
加載驅(qū)動程序的第一種方法需要持久的預(yù)設(shè)環(huán)境。如果對這一點(diǎn)不能保證,則調(diào)用方法Class.forName顯式地加載每個驅(qū)動程序就顯得更為安全。這也是引入特定驅(qū)動程序的方法。
2023/2/4
*第16頁10.4.1JDBCAPI工具2.建立數(shù)據(jù)庫連接的工具(DriverManager.getConnection)
DriverManager實(shí)現(xiàn)了建立數(shù)據(jù)庫連接的3個getConnection()方法。每個方法都返回一個Connection對象,但它們接收的參數(shù)不同?!etConnection(Stringurl)方法只接收數(shù)據(jù)庫URL作為參數(shù),用當(dāng)前的Driver對象或已注冊的Driver對象表中某個對象連接指定的數(shù)據(jù)庫。該方法中假定構(gòu)造數(shù)據(jù)庫連接時不需要用戶名、口令或其他數(shù)據(jù)庫屬性。2023/2/4
*第17頁10.4.1JDBCAPI工具·getConnection(Stringurl,Propertiesinfo)方法接收兩個參數(shù):數(shù)據(jù)庫的URL和連接數(shù)據(jù)庫所需各種屬性的Properties對象。第二個參數(shù)必須是Properties對象,它包含連接指定數(shù)據(jù)庫所需的所有屬性項(xiàng)?!etConnection(Stringurl,Stringuser,Stringpassword)方法接收3個參數(shù),第一個是數(shù)據(jù)庫的URL,第二個說明連接數(shù)據(jù)所用的用戶名;第三個是DriverManager連接數(shù)據(jù)庫時所用的用戶口令。2023/2/4
*第18頁10.4.1JDBCAPI工具3.Connection對象Connection對象是用于連接數(shù)據(jù)庫和Java應(yīng)用程序的主要對象。利用它可以創(chuàng)建所有的Statement對象,這些Statement對象用于執(zhí)行SQL語句,并從數(shù)據(jù)庫中讀取結(jié)果。Driver對象的connect()方法和DrvierManager對象的getConnection()方法都可以創(chuàng)建應(yīng)用程序中的Connection對象。Connection對象提供應(yīng)用程序與數(shù)據(jù)庫的靜態(tài)連接。除非調(diào)用Connection對象的close()方法,或者刪除Connection對象才斷開數(shù)據(jù)庫連接,否則保持有效連接。如果數(shù)據(jù)庫限制連接的數(shù)目,使用靜態(tài)連接過多就會存在一些問題。這時,最好只在需要時才連接數(shù)據(jù)庫,并在操作完畢后斷開數(shù)據(jù)庫連接。2023/2/4
*第19頁10.4.1JDBCAPI工具4.Statement對象連接數(shù)據(jù)庫后,要執(zhí)行SQL語句,得到數(shù)據(jù)庫的返回結(jié)果,必須使用Statement對象。Statement對象與Connection對象一樣不能直接創(chuàng)建,必須通過Connection對象的createStatement()方法返回—個Statement對象。利用Statement對象執(zhí)行SQL查詢。靜態(tài)SQL語句的執(zhí)行不需要接收任何參數(shù)。而動態(tài)SQL語句只有得到指定數(shù)目的參數(shù)后才是完整的SQL語句。靜態(tài)SQL可以是select語句、delete語句、update語句、insert語句,甚至可以是存儲過程的調(diào)用語句。update、delete和insert語句不返回任何結(jié)果,只修改數(shù)據(jù)庫中的數(shù)據(jù)。select語句一般都要返回?cái)?shù)據(jù)庫中的數(shù)據(jù)。Statement對象的主要方法如表10.1所示。2023/2/4
*第20頁10.4.2連接數(shù)據(jù)庫介紹前兩種方法:一種是通過JDBC驅(qū)動程序,另一種是通過JDBC-ODBC橋+ODBC驅(qū)動與數(shù)據(jù)庫進(jìn)行連接。以下將用兩個實(shí)例來詳細(xì)說明如何運(yùn)用這兩種方法與數(shù)據(jù)庫通信。1.使用JDBC驅(qū)動程序連接PointBase數(shù)據(jù)庫下面這個例子是在Windows操作系統(tǒng)下,使用PointBase提供的JDBC驅(qū)動連接數(shù)據(jù)庫?!纠?0.2】首先,安裝JDBC驅(qū)動程序,把含有驅(qū)動程序的.zip或者.jar文件放到CLASSPATH下。然后,創(chuàng)建一個新的數(shù)據(jù)庫:運(yùn)行PointBase,打開DBA菜單,選擇Create→CreateNewDatabase命令,如圖10.5所示,把這個新建的數(shù)據(jù)庫取名為DoMiSo。2023/2/4
*第21頁10.4.2連接數(shù)據(jù)庫2023/2/4
*第22頁10.4.2連接數(shù)據(jù)庫準(zhǔn)備工作已基本完成,運(yùn)行下面的程序就可以與PointBase下的DoMiSo數(shù)據(jù)庫進(jìn)行連接了。程序的代碼2023/2/4
*第23頁10.4.2連接數(shù)據(jù)庫2.JDBC-ODBC橋+ODBC驅(qū)動連接Access2000數(shù)據(jù)庫在Java的開發(fā)工具包中一般都會自帶JDBC-ODBC橋。在這個例子中,我們使用的操作系統(tǒng)是WindowsXP,此系統(tǒng)下Access的ODBC驅(qū)動已安裝配置完備。【例10.3】首先,創(chuàng)建數(shù)據(jù)庫。運(yùn)行MicrosoftAccess,創(chuàng)建一個新的數(shù)據(jù)庫,取名為Connect。然后,創(chuàng)建數(shù)據(jù)源。打開控制面板,單擊“管理工具”→“數(shù)據(jù)源(ODBC)”圖標(biāo),打開“ODBC數(shù)據(jù)源管理器”對話框,單擊“添加”按鈕后彈出“創(chuàng)建新數(shù)據(jù)源”對話框,如圖所示。2023/2/4
*第24頁10.4.2連接數(shù)據(jù)庫在圖中的“名稱”列表框中選擇“DriverdoMicrosoftAccess”選項(xiàng),單擊“完成”后彈出對話框。2023/2/4
*第25頁10.4.2連接數(shù)據(jù)庫這個新的數(shù)據(jù)源命名為Connection,然后單擊“選擇”按鈕,找到Connect.mdb,單擊“確定”按鈕,至此已成功地創(chuàng)建數(shù)據(jù)源。程序代碼
2023/2/4
*第26頁10.4.2連接數(shù)據(jù)庫ConnectAccess連接數(shù)據(jù)源的執(zhí)行結(jié)果2023/2/4
*第27頁10.4.2連接數(shù)據(jù)庫3.動態(tài)選擇加載驅(qū)動程序的類型以上所舉的兩個例子都是在程序代碼中預(yù)先指定了所要加載的驅(qū)動程序以及要連接的數(shù)據(jù)庫等信息。實(shí)際上,可以嘗試一種更一般的形式,即不在程序中固定使用哪一種驅(qū)動程序,也不固定URL等,而是提供一個可視化的用戶界面,讓用戶通過選擇不同的Driver和URL來連接不同的數(shù)據(jù)庫。程序代碼:2023/2/4
*第28頁10.4.2連接數(shù)據(jù)庫連接SQLServer數(shù)據(jù)庫的有關(guān)信息2023/2/4
*第29頁10.4.2連接數(shù)據(jù)庫連接因特網(wǎng)上另一臺機(jī)器上的Oracle數(shù)據(jù)庫的結(jié)果2023/2/4
*第30頁10.5小結(jié)JDBC為在Java中開發(fā)數(shù)據(jù)庫應(yīng)用提供了一個良好的工具,有了JDBCAPI,就不必為訪問每一種數(shù)據(jù)庫各寫一個程序,也無須擔(dān)憂要為不同的平臺編寫不同的應(yīng)用程序。JDBC也擴(kuò)展了Java的網(wǎng)絡(luò)功能。例如,使用Java的網(wǎng)絡(luò)功能,再加上JDBC,無論何時何地都可能訪問遠(yuǎn)程數(shù)據(jù)庫。JDBC訪問數(shù)據(jù)庫的方式有多種,粗略劃分可分為兩類:利用數(shù)據(jù)庫廠家的驅(qū)動程序和利用ODBC;若利用前者,可到SUN公司的網(wǎng)站或數(shù)據(jù)庫廠商的網(wǎng)站上下載驅(qū)動程序,這些驅(qū)動程序已實(shí)現(xiàn)為
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商務(wù)辦公室租賃合同模板
- 行政管理實(shí)習(xí)生實(shí)習(xí)協(xié)議合同書
- 2025年餐飲承包合同范本處理垃圾合同7篇
- 門面房變更合同協(xié)議
- 互聯(lián)網(wǎng)+維修服務(wù)合同示例
- 高速公路特許經(jīng)營權(quán)轉(zhuǎn)讓正式合同
- 全新酒店場地租賃合同范本
- 2025年零售業(yè)庫存周轉(zhuǎn)率提升合同
- 家庭與保姆勞動合同樣本
- 智能家居系統(tǒng)安裝合同樣本
- 《商務(wù)溝通-策略、方法與案例》課件 第五章 網(wǎng)絡(luò)溝通
- 市場調(diào)查 第三版 課件全套 夏學(xué)文 單元1-8 市場調(diào)查認(rèn)知 - 市場調(diào)查報告的撰寫與評估
- 身心活化健康評估老年康體指導(dǎo)初級
- 《公共設(shè)施設(shè)計(jì)》課件
- 2024-2030年中國琥珀酸二辛酯磺酸鈉產(chǎn)業(yè)未來發(fā)展趨勢及投資策略分析報告
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
- 現(xiàn)代服務(wù)服務(wù)費(fèi)合同范本
- 2024年云南省公務(wù)員錄用考試《行測》試題及答案解析
- 2024年度-工程造價培訓(xùn)課件全新
- 工業(yè)互聯(lián)網(wǎng)平臺的架構(gòu)與功能
- 高中學(xué)校工會工作制度
評論
0/150
提交評論