




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