




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
,第11章 訪問數(shù)據(jù)庫,內(nèi)容摘要,在當今網(wǎng)絡技術(shù)蓬勃發(fā)展的時代,數(shù)據(jù)庫扮演著非常重要的角色;因此,數(shù)據(jù)庫操作是程序應用的最重要技術(shù)之一。如何獲取數(shù)據(jù)、增加數(shù)據(jù)、刪除數(shù)據(jù),以及如何對數(shù)據(jù)庫進行管理,是每個程序開發(fā)者必須面對的問題。為了使程序開發(fā)人員不必考慮所用的數(shù)據(jù)庫更可編寫應用程序,Java平臺提供一個標準的數(shù)據(jù)庫訪問接口集JDBC API。 本章將要介紹JDBC基本概念和接口,并且介紹訪問數(shù)據(jù)庫的不同方式,以及如何使用JDBC接口操作數(shù)據(jù)庫等。,學習目標,掌握JDBC概念 熟練掌握JDBC常用API 熟練掌握連接數(shù)據(jù)庫 熟練掌握更新數(shù)據(jù)庫 掌握使用JDBC調(diào)用存儲過程 掌握JDBC預編譯語句 掌握使用JDBC元數(shù)據(jù) 掌握在Swing中執(zhí)行數(shù)據(jù)庫操作,11.1 JDBC基礎,在Java程序中,對數(shù)據(jù)庫的操作都通過JDBC組件完成。JDBC在Java程序和數(shù)據(jù)庫之間充當一個橋梁的作用。Java程序可以通過JDBC向數(shù)據(jù)庫發(fā)出命令,數(shù)據(jù)庫管理系統(tǒng)獲得命令后,執(zhí)行請求,并將請求結(jié)果通過JDBC返回給Java程序。JDBC分為JDBC驅(qū)動程序和JDBC API。JDBC驅(qū)動程序是一個翻譯器,可以把底層的DBMS私有信息轉(zhuǎn)換成JDBC API能理解的底層消息,反之亦然。在本節(jié)將會詳細介紹JDBC的概念、組成以及應用等。,11.1.1 JDBC概述,JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠使用純Java語言編寫完整的數(shù)據(jù)庫應用程序。 JDBC是Sun提供的一套數(shù)據(jù)庫編程接口API函數(shù),由Java語言編寫的類、界面組成。用JDBC寫的程序能夠自動地將SQL語句傳送給相應的數(shù)據(jù)庫管理系統(tǒng)。不但如此,使用Java編寫的應用程序還可以在任何支持Java的平臺上運行,不必在不同的平臺上編寫不同的應用。Java和JDBC的結(jié)合可以讓開發(fā)人員在開發(fā)數(shù)據(jù)庫應用程序時真正實現(xiàn)“Write Once,Run Everywhere!”,11.1.1 JDBC概述,有了JDBC,向各種關(guān)系數(shù)據(jù)庫發(fā)送SQL語句就是一件很容易的事。只要數(shù)據(jù)庫廠商支持JDBC,并為數(shù)據(jù)庫預留JDBC接口驅(qū)動程序。那么就不必為訪問Sybase數(shù)據(jù)庫專門寫一個程序,為訪問Oracle數(shù)據(jù)庫又專門寫一個程序,為訪問Informix數(shù)據(jù)庫又寫另一個程序等。只需用JDBC API寫一個程序就夠了,它可向預留的JDBC驅(qū)動程序發(fā)送數(shù)據(jù),經(jīng)過JDBC驅(qū)動程序翻譯,然后發(fā)送SQL語句給數(shù)據(jù)庫。而且,使用Java編程語言編寫的應用程序,就無須去憂慮要為不同的平臺編寫不同的應用程序。將Java和JDBC結(jié)合起來將使程序員只須寫一遍程序就可讓它在任何平臺上運行。,11.1.1 JDBC概述,圖11-1 應用程序、JDBC和驅(qū)動程序之間的關(guān)系,11.1.2 JDBC API介紹,JDBC API包含在兩個包里。第一個包是java.sql,它包含了JDBC API的核心Java數(shù)據(jù)對象,這包括為DBMS(數(shù)據(jù)庫管理系統(tǒng))連接和存儲在DBMS里的數(shù)據(jù)進行交互而提供的Java數(shù)據(jù)對象。另外一個包含JDBC API的包是javax.sql,它擴展了java.sql,是J2EE/Java EE的一部分。除其他高級JDBC特性外,javax.sql還包含了那些與Java命名與目錄接口(JNDI)進行交互的Java數(shù)據(jù)對象,以及管理連接池的Java數(shù)據(jù)對象。,11.1.2 JDBC API介紹,圖11-2 JDBC API結(jié)構(gòu)圖,11.1.2 JDBC API介紹,DriverManager DriverManager類是JDBC的管理層,作用于用戶和驅(qū)動程序之間。它跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應驅(qū)動程序之間建立連接。另外,DriverManager類也處理諸如驅(qū)動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。 Connection Connection對象代表與數(shù)據(jù)庫的連接。連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結(jié)果。一個應用程序可與單個數(shù)據(jù)庫有一個或多個連接,或者可與許多數(shù)據(jù)庫有連接。,11.1.2 JDBC API介紹,Statement Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。實際上有三種Statement對象,它們都作為在給定連接上執(zhí)行SQL語句的包容器:Statement、PreparedStatement(它從Statement繼承而來)和CallableStatement(它從PreparedStatement 繼承而來)。它們都專用于發(fā)送特定類型的SQL語句:Statement對象用于執(zhí)行不帶參數(shù)的簡單SQL語句;PreparedStatement對象用于執(zhí)行帶或不帶IN參數(shù)的預編譯SQL語句;CallableStatement對象用于執(zhí)行對數(shù)據(jù)庫已存儲過程的調(diào)用。Statement接口提供了執(zhí)行語句和獲取結(jié)果的基本方法。PreparedStatement接口添加了處理IN參數(shù)的方法;而CallableStatement添加了處理OUT參數(shù)的方法。,11.1.2 JDBC API介紹,ResultSet 使用Statement對象執(zhí)行executeQuery()方法,將會返回一個數(shù)據(jù)庫的結(jié)果集。結(jié)果集一般是一個表,其中有查詢所返回的列標題及相應的值。ResultSet記錄集中了包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數(shù)據(jù)的訪問。ResultSet使用next方法用于移動到ResultSet中的下一行,使下一行成為當前行。,11.1.3 JDBC連接數(shù)據(jù)庫方式,在java.sql包中,只包括少量具體類。API中的大部分被描述為數(shù)據(jù)庫的中樞接口類,它們指定具體操作而不提供任何實現(xiàn)。實際的實現(xiàn)由第三方提供商提供。獨立的數(shù)據(jù)庫系統(tǒng)通過一個實現(xiàn)java.sql.Driver接口的特定JDBC驅(qū)動程序被接收。驅(qū)動程序支持幾乎所有流行的RDBMS(關(guān)系數(shù)據(jù)庫管理)系統(tǒng),但不是都可免費獲得的。Sun公司將一個免費的JDBC-ODBC橋驅(qū)動程序綁定在JDK上以支持標準ODBC數(shù)據(jù)源。 JDBC驅(qū)動程序可用于大多數(shù)數(shù)據(jù)平臺,它們來自許多提供商并且區(qū)別很大。下面介紹四種不同類型的驅(qū)動程序。,11.1.3 JDBC連接數(shù)據(jù)庫方式,JDBC-ODBC橋 圖11-3 通過JDBC-ODBC橋訪問數(shù)據(jù)庫,11.1.3 JDBC連接數(shù)據(jù)庫方式,通過JDBC-ODBC橋訪問數(shù)據(jù)庫 圖11-4 通過本地協(xié)議的純Java驅(qū)動程序訪問數(shù)據(jù)庫,11.1.3 JDBC連接數(shù)據(jù)庫方式,部分本地API Java驅(qū)動程序 圖11-5 部分本地API Java驅(qū)動程序,11.1.3 JDBC連接數(shù)據(jù)庫方式,JDBC網(wǎng)絡純Java驅(qū)動程序 圖11-6 利用作為中間件的應用服務器訪問數(shù)據(jù)庫,11.2 數(shù)據(jù)庫常見操作,在Java程序開發(fā)中,大部分程序都離不開后臺數(shù)據(jù)庫的支持。對于初學者來說,在Java中操作數(shù)據(jù)庫是程序開發(fā)的重點和難點。前面介紹了JDBC的基本概念和相關(guān)的接口。下面將介紹在Java程序通過JDBC訪問數(shù)據(jù)庫,并且介紹在數(shù)據(jù)庫中執(zhí)行不同的操作的方法。,11.2.1 連接數(shù)據(jù)庫,無論采用上一節(jié)介紹的哪種方式連接數(shù)據(jù)庫,如jdbc-odbc橋連接或純Java驅(qū)動程序連接,其連接步驟和使用到的JDBC API都是相同的。,11.2.1 連接數(shù)據(jù)庫,連接前準備 連接數(shù)據(jù)庫 Java程序通過JDBC組件連接一個數(shù)據(jù)庫,可以分為加載JDBC驅(qū)動程序、提供JDBC URL和獲取Connection對象幾個步驟。 連接實例 在了解了Java程序中連接數(shù)據(jù)庫的基本步驟后,就可以動手編寫一個Java程序,實現(xiàn)對MySQL數(shù)據(jù)庫的連接。,11.2.2 顯示數(shù)據(jù)庫數(shù)據(jù),在上一個小節(jié)中,我們利用DriverManager和Connection接口,可以成功的連接到后臺數(shù)據(jù)庫。當數(shù)據(jù)庫連接成功后,就可以顯示數(shù)據(jù)庫中的數(shù)據(jù)。,11.2.3 更新數(shù)據(jù)庫數(shù)據(jù),在Java程序中,由于外部環(huán)境的變化,后臺連接數(shù)據(jù)庫中的數(shù)據(jù)每隔一段時間,就需要更新。我們不可能直接打開MySQL數(shù)據(jù)庫進行更新,一般情況下都是借助Java程序進行更新。更新數(shù)據(jù)庫中的數(shù)據(jù),可以使用SQL語句的UPDATE、INSERT和DELETE操作,然后將包含UPDATE、INSERT、DELETE的SQL語句交給Statement對象的executeUpdate()方法執(zhí)行。Statement對象用于執(zhí)行不帶參數(shù)的簡單SQL語句。,11.2.4 查詢數(shù)據(jù)庫數(shù)據(jù),條件的顯示數(shù)據(jù)庫數(shù)據(jù),是程序員必須要掌握的技能之一。在Java程序中,顯示符合條件的數(shù)據(jù)記錄非常簡單,只需要修改其執(zhí)行的sql語句就可以。,11.3 JDBC高級操作,除了上面介紹的基本操作外,如數(shù)據(jù)顯示、添加、刪除和修改外,還可以使用JDBC對數(shù)據(jù)庫執(zhí)行高級操作,如成批添加數(shù)據(jù)和調(diào)用存儲過程等。,11.3.1 使用PreparedStatement接口執(zhí)行SQL語句,PreparedStatement接口創(chuàng)建表示預編譯的SQL語句對象。SQL語句經(jīng)過預編譯,并存儲在PreparedStatement對象中。然后,此對象可用來有效地多次執(zhí)行此語句。PreparedStatement接口繼承Statement類,并與之在兩方面有所不同: PreparedStatement實例包含已編譯的SQL語句。由于PreparedStatement對象已預編譯過,所以其執(zhí)行速度要快于Statement對象。因此,多次執(zhí)行的SQL語句經(jīng)常創(chuàng)建為PreparedStatement對象,以提高效率。 包含于PreparedStatement對象中的SQL語句可具有一個或多個IN參參。IN參數(shù)的值在SQL語句創(chuàng)建時未被指定。相反的,該語句為每個IN參數(shù)保留一個問號(“?”)作為占位符。每個問號的值必須在該語句執(zhí)行之前,通過適當?shù)腟etXXX方法來提供。,11.3.1 使用PreparedStatement接口執(zhí)行SQL語句,作為Statement的子類,PreparedStatement繼承了Statement的所有功能。另外它還添加了一整套方法,用于設置發(fā)送給數(shù)據(jù)庫以取代IN參數(shù)占位符的值。同時,三種方法execute、executeQuery和executeUpdate已被更改又以使其不再需要參數(shù)。這些方法的Statement形式(接受SQL語句參數(shù)的形式)不應該用于PreparedStatement對象。,11.3.2 使用CallableStatement接口執(zhí)行SQL語句,存儲過程可以使得對數(shù)據(jù)庫的管理、顯示關(guān)于數(shù)據(jù)庫及其用戶信息的工作容易得多。存儲過程是SQL語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數(shù)據(jù)庫內(nèi),可由應用程序通過一個調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其他強大的編程功能。 存儲過程可包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集以及返回值。存儲過程的功能取決于數(shù)據(jù)庫所提供的功能。,11.3.2 使用CallableStatement接口執(zhí)行SQL語句,在JDBC組件中,CallableStatement接口對象為所有的DBMS提供了一種以標準形式調(diào)用存儲過程的方法。存儲過程存在數(shù)據(jù)庫中。對存儲過程的調(diào)用是CallableStatement對象所含的內(nèi)容。這種調(diào)用操作有兩種形式: 帶結(jié)果參數(shù)的形式 不帶結(jié)果參數(shù)的形式 在JDBC中調(diào)用存儲過程的語法如下所示: call 過程名(?,?,?,) 返回結(jié)果參數(shù)的過程的語法為: ?=call 過程名(?,?,?,) 不帶參數(shù)的已存儲的過程語法為: call 過程名,11.3.2 使用CallableStatement接口執(zhí)行SQL語句,這里需要注意的是,上述語句法中,方括號表示其間的內(nèi)容是可選項;方括號本身并不是語法的組成部分。 CallableStatement繼承Statement的方法(它們用于處理一般的SQL語句),還繼承PreparedStatement的方法(它們用于處理IN參數(shù))。CallableStatement中定義的所有方法都用于處理OUT參數(shù)或INOUT參數(shù)的輸出部分,注冊OUT參數(shù)的JDBC類型(一般SQL類型),從這些參數(shù)中檢索結(jié)果,或者檢查所返回的值是否為JDBC NULL。,11.4 JDBC元數(shù)據(jù),元數(shù)據(jù)是對數(shù)據(jù)資源的描述,英文名稱是“Metadata”,通常被解釋為data about data,即關(guān)于數(shù)據(jù)的數(shù)據(jù)。元數(shù)據(jù)是信息共享和交換的基礎和前提,用于描述數(shù)據(jù)集的內(nèi)容、質(zhì)量、表示方式、空間參考、管理方式以及數(shù)據(jù)集的其他特征。 JDBC提供了三個元數(shù)據(jù)接口:DatabaseMetaData、ResultSetMetaData和ParameterMetaData。其中DatabaseMetaData提供了數(shù)據(jù)庫以及DBMS的相關(guān)信息,Resul
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年云計算服務模式變革下的市場細分領(lǐng)域競爭格局研究報告
- 校園安全管理報告2025:智慧校園安全教育與培訓課程開發(fā)與應用
- 2025年醫(yī)院電子病歷系統(tǒng)與移動醫(yī)療設備集成優(yōu)化報告
- 江蘇省鎮(zhèn)江市名校2025屆英語七下期中統(tǒng)考試題含答案
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)市場潛力與未來發(fā)展趨勢報告001
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)模式生物材料研發(fā)與產(chǎn)業(yè)化報告
- 2025年農(nóng)村一二三產(chǎn)業(yè)融合發(fā)展的農(nóng)產(chǎn)品質(zhì)量安全監(jiān)管報告
- 周期表課件教學課件
- 2025年公眾參與環(huán)境影響評價的公眾參與機制與公眾參與能力培養(yǎng)研究報告
- 2025年高校產(chǎn)學研合作技術(shù)轉(zhuǎn)移創(chuàng)新生態(tài)構(gòu)建研究
- 2024年 紹興市交通控股集團公司招聘考試筆試真題試題含答案
- 超限模板及高支模安全專項施工方案(論證后)
- 日間化療服務管理制度
- 暑假散學典禮課件小學生
- 2024年涼山州木里縣選聘社區(qū)工作者真題
- 2025年新高考1卷(新課標Ⅰ卷)英語試卷
- 部編版七年級語文下冊第4單元試題及答案
- 東莞職業(yè)技術(shù)學院輔導員考試題庫
- GB 18613-2020電動機能效限定值及能效等級
- (高清正版)JJF(浙)1080—2012明渠流量計在線校準規(guī)范(電子版)
- 外科常見診療技術(shù)操作規(guī)范
評論
0/150
提交評論