




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
,第11章 訪問數據庫,內容摘要,在當今網絡技術蓬勃發(fā)展的時代,數據庫扮演著非常重要的角色;因此,數據庫操作是程序應用的最重要技術之一。如何獲取數據、增加數據、刪除數據,以及如何對數據庫進行管理,是每個程序開發(fā)者必須面對的問題。為了使程序開發(fā)人員不必考慮所用的數據庫更可編寫應用程序,Java平臺提供一個標準的數據庫訪問接口集JDBC API。 本章將要介紹JDBC基本概念和接口,并且介紹訪問數據庫的不同方式,以及如何使用JDBC接口操作數據庫等。,學習目標,掌握JDBC概念 熟練掌握JDBC常用API 熟練掌握連接數據庫 熟練掌握更新數據庫 掌握使用JDBC調用存儲過程 掌握JDBC預編譯語句 掌握使用JDBC元數據 掌握在Swing中執(zhí)行數據庫操作,11.1 JDBC基礎,在Java程序中,對數據庫的操作都通過JDBC組件完成。JDBC在Java程序和數據庫之間充當一個橋梁的作用。Java程序可以通過JDBC向數據庫發(fā)出命令,數據庫管理系統(tǒng)獲得命令后,執(zhí)行請求,并將請求結果通過JDBC返回給Java程序。JDBC分為JDBC驅動程序和JDBC API。JDBC驅動程序是一個翻譯器,可以把底層的DBMS私有信息轉換成JDBC API能理解的底層消息,反之亦然。在本節(jié)將會詳細介紹JDBC的概念、組成以及應用等。,11.1.1 JDBC概述,JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關系數據庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發(fā)人員能夠使用純Java語言編寫完整的數據庫應用程序。 JDBC是Sun提供的一套數據庫編程接口API函數,由Java語言編寫的類、界面組成。用JDBC寫的程序能夠自動地將SQL語句傳送給相應的數據庫管理系統(tǒng)。不但如此,使用Java編寫的應用程序還可以在任何支持Java的平臺上運行,不必在不同的平臺上編寫不同的應用。Java和JDBC的結合可以讓開發(fā)人員在開發(fā)數據庫應用程序時真正實現(xiàn)“Write Once,Run Everywhere!”,11.1.1 JDBC概述,有了JDBC,向各種關系數據庫發(fā)送SQL語句就是一件很容易的事。只要數據庫廠商支持JDBC,并為數據庫預留JDBC接口驅動程序。那么就不必為訪問Sybase數據庫專門寫一個程序,為訪問Oracle數據庫又專門寫一個程序,為訪問Informix數據庫又寫另一個程序等。只需用JDBC API寫一個程序就夠了,它可向預留的JDBC驅動程序發(fā)送數據,經過JDBC驅動程序翻譯,然后發(fā)送SQL語句給數據庫。而且,使用Java編程語言編寫的應用程序,就無須去憂慮要為不同的平臺編寫不同的應用程序。將Java和JDBC結合起來將使程序員只須寫一遍程序就可讓它在任何平臺上運行。,11.1.1 JDBC概述,圖11-1 應用程序、JDBC和驅動程序之間的關系,11.1.2 JDBC API介紹,JDBC API包含在兩個包里。第一個包是java.sql,它包含了JDBC API的核心Java數據對象,這包括為DBMS(數據庫管理系統(tǒng))連接和存儲在DBMS里的數據進行交互而提供的Java數據對象。另外一個包含JDBC API的包是javax.sql,它擴展了java.sql,是J2EE/Java EE的一部分。除其他高級JDBC特性外,javax.sql還包含了那些與Java命名與目錄接口(JNDI)進行交互的Java數據對象,以及管理連接池的Java數據對象。,11.1.2 JDBC API介紹,圖11-2 JDBC API結構圖,11.1.2 JDBC API介紹,DriverManager DriverManager類是JDBC的管理層,作用于用戶和驅動程序之間。它跟蹤可用的驅動程序,并在數據庫和相應驅動程序之間建立連接。另外,DriverManager類也處理諸如驅動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。 Connection Connection對象代表與數據庫的連接。連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結果。一個應用程序可與單個數據庫有一個或多個連接,或者可與許多數據庫有連接。,11.1.2 JDBC API介紹,Statement Statement對象用于將SQL語句發(fā)送到數據庫中。實際上有三種Statement對象,它們都作為在給定連接上執(zhí)行SQL語句的包容器:Statement、PreparedStatement(它從Statement繼承而來)和CallableStatement(它從PreparedStatement 繼承而來)。它們都專用于發(fā)送特定類型的SQL語句:Statement對象用于執(zhí)行不帶參數的簡單SQL語句;PreparedStatement對象用于執(zhí)行帶或不帶IN參數的預編譯SQL語句;CallableStatement對象用于執(zhí)行對數據庫已存儲過程的調用。Statement接口提供了執(zhí)行語句和獲取結果的基本方法。PreparedStatement接口添加了處理IN參數的方法;而CallableStatement添加了處理OUT參數的方法。,11.1.2 JDBC API介紹,ResultSet 使用Statement對象執(zhí)行executeQuery()方法,將會返回一個數據庫的結果集。結果集一般是一個表,其中有查詢所返回的列標題及相應的值。ResultSet記錄集中了包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數據的訪問。ResultSet使用next方法用于移動到ResultSet中的下一行,使下一行成為當前行。,11.1.3 JDBC連接數據庫方式,在java.sql包中,只包括少量具體類。API中的大部分被描述為數據庫的中樞接口類,它們指定具體操作而不提供任何實現(xiàn)。實際的實現(xiàn)由第三方提供商提供。獨立的數據庫系統(tǒng)通過一個實現(xiàn)java.sql.Driver接口的特定JDBC驅動程序被接收。驅動程序支持幾乎所有流行的RDBMS(關系數據庫管理)系統(tǒng),但不是都可免費獲得的。Sun公司將一個免費的JDBC-ODBC橋驅動程序綁定在JDK上以支持標準ODBC數據源。 JDBC驅動程序可用于大多數數據平臺,它們來自許多提供商并且區(qū)別很大。下面介紹四種不同類型的驅動程序。,11.1.3 JDBC連接數據庫方式,JDBC-ODBC橋 圖11-3 通過JDBC-ODBC橋訪問數據庫,11.1.3 JDBC連接數據庫方式,通過JDBC-ODBC橋訪問數據庫 圖11-4 通過本地協(xié)議的純Java驅動程序訪問數據庫,11.1.3 JDBC連接數據庫方式,部分本地API Java驅動程序 圖11-5 部分本地API Java驅動程序,11.1.3 JDBC連接數據庫方式,JDBC網絡純Java驅動程序 圖11-6 利用作為中間件的應用服務器訪問數據庫,11.2 數據庫常見操作,在Java程序開發(fā)中,大部分程序都離不開后臺數據庫的支持。對于初學者來說,在Java中操作數據庫是程序開發(fā)的重點和難點。前面介紹了JDBC的基本概念和相關的接口。下面將介紹在Java程序通過JDBC訪問數據庫,并且介紹在數據庫中執(zhí)行不同的操作的方法。,11.2.1 連接數據庫,無論采用上一節(jié)介紹的哪種方式連接數據庫,如jdbc-odbc橋連接或純Java驅動程序連接,其連接步驟和使用到的JDBC API都是相同的。,11.2.1 連接數據庫,連接前準備 連接數據庫 Java程序通過JDBC組件連接一個數據庫,可以分為加載JDBC驅動程序、提供JDBC URL和獲取Connection對象幾個步驟。 連接實例 在了解了Java程序中連接數據庫的基本步驟后,就可以動手編寫一個Java程序,實現(xiàn)對MySQL數據庫的連接。,11.2.2 顯示數據庫數據,在上一個小節(jié)中,我們利用DriverManager和Connection接口,可以成功的連接到后臺數據庫。當數據庫連接成功后,就可以顯示數據庫中的數據。,11.2.3 更新數據庫數據,在Java程序中,由于外部環(huán)境的變化,后臺連接數據庫中的數據每隔一段時間,就需要更新。我們不可能直接打開MySQL數據庫進行更新,一般情況下都是借助Java程序進行更新。更新數據庫中的數據,可以使用SQL語句的UPDATE、INSERT和DELETE操作,然后將包含UPDATE、INSERT、DELETE的SQL語句交給Statement對象的executeUpdate()方法執(zhí)行。Statement對象用于執(zhí)行不帶參數的簡單SQL語句。,11.2.4 查詢數據庫數據,條件的顯示數據庫數據,是程序員必須要掌握的技能之一。在Java程序中,顯示符合條件的數據記錄非常簡單,只需要修改其執(zhí)行的sql語句就可以。,11.3 JDBC高級操作,除了上面介紹的基本操作外,如數據顯示、添加、刪除和修改外,還可以使用JDBC對數據庫執(zhí)行高級操作,如成批添加數據和調用存儲過程等。,11.3.1 使用PreparedStatement接口執(zhí)行SQL語句,PreparedStatement接口創(chuàng)建表示預編譯的SQL語句對象。SQL語句經過預編譯,并存儲在PreparedStatement對象中。然后,此對象可用來有效地多次執(zhí)行此語句。PreparedStatement接口繼承Statement類,并與之在兩方面有所不同: PreparedStatement實例包含已編譯的SQL語句。由于PreparedStatement對象已預編譯過,所以其執(zhí)行速度要快于Statement對象。因此,多次執(zhí)行的SQL語句經常創(chuàng)建為PreparedStatement對象,以提高效率。 包含于PreparedStatement對象中的SQL語句可具有一個或多個IN參參。IN參數的值在SQL語句創(chuàng)建時未被指定。相反的,該語句為每個IN參數保留一個問號(“?”)作為占位符。每個問號的值必須在該語句執(zhí)行之前,通過適當的SetXXX方法來提供。,11.3.1 使用PreparedStatement接口執(zhí)行SQL語句,作為Statement的子類,PreparedStatement繼承了Statement的所有功能。另外它還添加了一整套方法,用于設置發(fā)送給數據庫以取代IN參數占位符的值。同時,三種方法execute、executeQuery和executeUpdate已被更改又以使其不再需要參數。這些方法的Statement形式(接受SQL語句參數的形式)不應該用于PreparedStatement對象。,11.3.2 使用CallableStatement接口執(zhí)行SQL語句,存儲過程可以使得對數據庫的管理、顯示關于數據庫及其用戶信息的工作容易得多。存儲過程是SQL語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數據庫內,可由應用程序通過一個調用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其他強大的編程功能。 存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們可以接受參數、輸出參數、返回單個或多個結果集以及返回值。存儲過程的功能取決于數據庫所提供的功能。,11.3.2 使用CallableStatement接口執(zhí)行SQL語句,在JDBC組件中,CallableStatement接口對象為所有的DBMS提供了一種以標準形式調用存儲過程的方法。存儲過程存在數據庫中。對存儲過程的調用是CallableStatement對象所含的內容。這種調用操作有兩種形式: 帶結果參數的形式 不帶結果參數的形式 在JDBC中調用存儲過程的語法如下所示: call 過程名(?,?,?,) 返回結果參數的過程的語法為: ?=call 過程名(?,?,?,) 不帶參數的已存儲的過程語法為: call 過程名,11.3.2 使用CallableStatement接口執(zhí)行SQL語句,這里需要注意的是,上述語句法中,方括號表示其間的內容是可選項;方括號本身并不是語法的組成部分。 CallableStatement繼承Statement的方法(它們用于處理一般的SQL語句),還繼承PreparedStatement的方法(它們用于處理IN參數)。CallableStatement中定義的所有方法都用于處理OUT參數或INOUT參數的輸出部分,注冊OUT參數的JDBC類型(一般SQL類型),從這些參數中檢索結果,或者檢查所返回的值是否為JDBC NULL。,11.4 JDBC元數據,元數據是對數據資源的描述,英文名稱是“Metadata”,通常被解釋為data about data,即關于數據的數據。元數據是信息共享和交換的基礎和前提,用于描述數據集的內容、質量、表示方式、空間參考、管理方式以及數據集的其他特征。 JDBC提供了三個元數據接口:DatabaseMetaData、ResultSetMetaData和ParameterMetaData。其中DatabaseMetaData提供了數據庫以及DBMS的相關信息,Resul
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程建筑勞務分包協(xié)議范本
- 合同簽訂的法律依據解析3篇
- 合同條款修改協(xié)議3篇
- 關于調解協(xié)議書范文集合3篇
- 住宅小區(qū)土方供應3篇
- 弱電監(jiān)控系統(tǒng)建設項目招標3篇
- 空調器個性化定制服務考核試卷
- 木材標準化尺寸與加工適應性考核試卷
- 竹材采運企業(yè)社會責任與公益事業(yè)考核試卷
- 美容儀器產品的市場潛力評估與分析考核試卷
- 啤酒采購合同協(xié)議書模板
- 中醫(yī)把脈入門培訓課件
- 高血糖癥的急救與護理
- 成人失禁性皮炎的預防與護理
- 技術信息收集與分析方法考核試卷
- 小學2025年國防教育課程開發(fā)計劃
- 2025屆安徽省示范高中皖北協(xié)作區(qū)高三下學期一??荚囉⒄Z試題(原卷版+解析版)
- 防溺水家長測試題及答案
- 義務教育數學課程標準(2024年版)
- 三年級下冊面積單位換算練習100道及答案
- 住宅項目開盤前工作倒排表
評論
0/150
提交評論