Java編程基礎(chǔ)及應(yīng)用JDBC技術(shù)_第1頁
Java編程基礎(chǔ)及應(yīng)用JDBC技術(shù)_第2頁
Java編程基礎(chǔ)及應(yīng)用JDBC技術(shù)_第3頁
Java編程基礎(chǔ)及應(yīng)用JDBC技術(shù)_第4頁
Java編程基礎(chǔ)及應(yīng)用JDBC技術(shù)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第十三章JDBC技術(shù)JDBC是連接數(shù)據(jù)庫和Java程序的橋梁,通過使用JDBCAPI可以方便地實現(xiàn)對各種主流數(shù)據(jù)庫的操作?,F(xiàn)代大多應(yīng)用程序的開發(fā)都使用到了數(shù)據(jù)庫,所以在Java程序開發(fā)中,必須要了解JDBC技術(shù)。使用JDBC技術(shù)訪問數(shù)據(jù)庫可以達到查詢滿足條件的記錄,或者向數(shù)據(jù)庫中添加、修改、刪除數(shù)據(jù)。第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理13.1JDBC基礎(chǔ)JDBC(JavaDatabaseConnectivity,Java數(shù)據(jù)庫連接)是由Sun公司提供的與平臺無關(guān)的數(shù)據(jù)庫連接標準,是一種可以執(zhí)行SQL語句的JavaAPI。程序可以通過JDBCAPI連接到關(guān)系數(shù)據(jù)庫,并使用結(jié)構(gòu)化查詢語言來完成對數(shù)據(jù)庫的查詢、更新。13.1JDBC基礎(chǔ)Sun提供的JDBC可以完成以下三個基本工作:與數(shù)據(jù)庫建立連接。執(zhí)行SQL語句。獲得SQL語句的執(zhí)行結(jié)果。

通過JDBC的這三個功能,應(yīng)用程序就可以使用JDBC對數(shù)據(jù)庫系統(tǒng)進行操作了。13.1JDBC基礎(chǔ)JDBC訪問示意圖13.1JDBC基礎(chǔ)Java程序通過JBDCAPI訪問JDBCDriverManager,JBDCDriverManager再通過JDBC驅(qū)動程序?qū)崿F(xiàn)對不同數(shù)據(jù)庫的訪問。

目前比較常用的JDBC驅(qū)動程序可分為以下4類:JDBC-ODBC橋驅(qū)動JDBC本地驅(qū)動JDBC網(wǎng)絡(luò)驅(qū)動本地協(xié)議純JDBC驅(qū)動13.1JDBC基礎(chǔ)JDBC常用類和接口:

在Java語言中提供了豐富的類和接口用于數(shù)據(jù)庫編程,利用這些類和接口可以方便地進行數(shù)據(jù)庫的訪問和處理。以下為常用類和接口:DriverManager類Connection接口Statement接口PreparedStatement接口ResultSet接口第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理13.2JDBC操作步驟JDBC操作步驟:13.2JDBC操作步驟(1)加載數(shù)據(jù)庫驅(qū)動程序:各個數(shù)據(jù)庫都會提供JDBC的驅(qū)動程序開發(fā)包,直接把JDBC操作所需要的開發(fā)包(一般為*.jar或*.zip格式)配置到classpath路徑即可。(2)連接數(shù)據(jù)庫:根據(jù)各個數(shù)據(jù)庫的不同,連接數(shù)據(jù)庫的地址也不同,此連接地址由數(shù)據(jù)庫廠商提供。一般在使用JDBC連接數(shù)據(jù)庫時都要求用戶輸入數(shù)據(jù)庫連接的用戶名和密碼。13.2JDBC操作步驟(3)操作數(shù)據(jù)庫:數(shù)據(jù)庫的操作可以分為更新和查詢兩種。除了可以使用標準的SQL語句外,對于各個數(shù)據(jù)庫也可以使用期自己提供的命令進行操作。(4)關(guān)閉數(shù)據(jù)庫連接:數(shù)據(jù)庫操作完畢之后需要關(guān)閉連接以釋放資源。第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理13.3連接數(shù)據(jù)庫13.3.1配置驅(qū)動程序

在Java程序中,如果需要使用數(shù)據(jù)庫進行開發(fā),首先應(yīng)該下載對應(yīng)的數(shù)據(jù)庫驅(qū)動程序,然后配置到classpath中(直接修改本機的環(huán)境classpath即可)。MySQL數(shù)據(jù)庫驅(qū)動程序的設(shè)置如下圖所示。本書中MySQL數(shù)據(jù)庫驅(qū)動程序保存在E:\mysql-connector-java-5.1.7-bin.jar路徑中。13.3連接數(shù)據(jù)庫MySQL數(shù)據(jù)庫驅(qū)動程序設(shè)置:三種數(shù)據(jù)庫的驅(qū)動下載網(wǎng)址:MySQL驅(qū)動程序:/downloads/connector/j/SQLServer驅(qū)動程序:/project/showfiles.php?group_id=33291Oracle驅(qū)動程序:/technetwork/database/features/jdbc/index-091264.html13.3連接數(shù)據(jù)庫13.3.2加載驅(qū)動程序

Java中加載數(shù)據(jù)庫驅(qū)動的方法是調(diào)用Class類的靜態(tài)方法forName()。語法格式如下:Class.forName(StringdriverManager)

forName()方法參數(shù)指定要加載的數(shù)據(jù)庫驅(qū)動,加載成功會將加載的驅(qū)動類注冊給DriverManager。如果失敗則會拋出ClassNotFoundException異常。13.3連接數(shù)據(jù)庫例:加載MySQL數(shù)據(jù)庫的驅(qū)動

如果以上程序可以正常執(zhí)行,則證明數(shù)據(jù)庫驅(qū)動程序已經(jīng)配置成功。13.3連接數(shù)據(jù)庫13.3.3連接及關(guān)閉數(shù)據(jù)庫JDBC采用JDBCURL來標識數(shù)據(jù)庫(類似于URL來標識網(wǎng)絡(luò)資源),包括三個部分,用冒號分割。其語法如下:協(xié)議:子協(xié)議:子名稱協(xié)議:JDBCURL中的協(xié)議總是jdbc。子協(xié)議:表示數(shù)據(jù)庫類型,如mysql、odbc等。子名稱:表示數(shù)據(jù)庫的網(wǎng)絡(luò)標識字符串或數(shù)據(jù)源的名稱。

對于不同的數(shù)據(jù)庫,廠商提供的驅(qū)動程序和連接的URL都不相同。使用完數(shù)據(jù)庫后,需要close()方法對數(shù)據(jù)庫的連接進行關(guān)閉。13.3連接數(shù)據(jù)庫例:MySQL數(shù)據(jù)庫的連接與關(guān)閉第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理13.4數(shù)據(jù)庫操作

數(shù)據(jù)庫連接后,就可以進行對數(shù)據(jù)庫的具體操作。數(shù)據(jù)庫的操作需要使用Statement接口,此接口使用createStatement()方法實例化Statement對象。13.4.1插入數(shù)據(jù)13.4.2修改數(shù)據(jù)13.4.3刪除數(shù)據(jù)13.4.4查詢數(shù)據(jù)13.4.1插入數(shù)據(jù)

在Java程序中,可以使用Statement接口中的executeUpdate()方法執(zhí)行SQL語句,向數(shù)據(jù)庫中插入數(shù)據(jù)。例:使用executeUpdate()方法向user表中插入一條新的記錄13.4.1插入數(shù)據(jù)

對數(shù)據(jù)庫的操作還可以使用PreparedStatement接口來實現(xiàn),屬于預處理操作,與直接使用Statement不同的是,PreparedStatement在操作時,是現(xiàn)在數(shù)據(jù)表中準備好了一條SQL語句,但是此SQL語句的具體內(nèi)容暫時不設(shè)置,而是之后再進行設(shè)置。

PreparedStatement對象其執(zhí)行速度要高于Statement對象,對于需要多次執(zhí)行的SQL語句經(jīng)常使用PreparedStatement對象操作,以提高效率。13.4.1插入數(shù)據(jù)

在PreparedStatement中執(zhí)行的SQL語句與之前的大致相同,但是對于具體的內(nèi)容而是采用“?”的占位符形式出現(xiàn)的,設(shè)置是要按照“?”的順序設(shè)置具體的內(nèi)容。例:使用PreparedStatement接口中的方法執(zhí)行數(shù)據(jù)庫的添加操作13.4.2修改數(shù)據(jù)JDBC中可以使用Statement接口中的executeUpdate()方法修改數(shù)據(jù)庫表中的數(shù)據(jù),也可以使用PreparedStatement接口中的executeUpdate()方法對數(shù)據(jù)庫中的表進行修改操作。例:使用Statement接口中的executeUpdate()方法修改user表中的數(shù)據(jù),把id為1的用戶年齡修改為21。13.4.3刪除數(shù)據(jù)

對數(shù)據(jù)的刪除同樣可以使用Statement和PreparedStatement接口中的方法進行操作。例:使用Statement接口中的executeUpdate()方法刪除user表中id為1的用戶信息。13.4.4查詢數(shù)據(jù)Statement接口中的executeUpdate()或executeQuery()方法可以執(zhí)行SQL語句。executeUpdate()方法用于執(zhí)行數(shù)據(jù)的插入、修改或刪除操作,返回影響數(shù)據(jù)庫記錄的條數(shù)。executeQuery()方法用于執(zhí)行Select查詢語句,將放回一個ResultSet型的結(jié)果集。通過遍歷查詢結(jié)果集的內(nèi)容,才可獲取SQL語句執(zhí)行的查詢結(jié)果。13.4.4查詢數(shù)據(jù)例:查詢user表用戶所有的信息,在Eclipse控制臺顯示查詢結(jié)果。第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理13.5批處理

在JDBC中,提供了一個批處理的功能,使用批處理可以一次性提交多條SQL語句。使用批處理時也需要創(chuàng)建一個Statement對象,然后利用該對象的addBatch()方法將多條SQL語句同時收集起來,最后調(diào)用Statement對象的executeBatch()方法同時執(zhí)行這些SQL語句。13.5批處理例:批量插入數(shù)據(jù)。第十三章JDBC技術(shù)13.1JDBC基礎(chǔ)13.2JDBC操作步驟13.3連接數(shù)據(jù)庫13.4數(shù)據(jù)庫操作13.5批處理13.6事務(wù)處理13.6事務(wù)處理

事務(wù)是由一步或幾步數(shù)據(jù)庫操作序列組成的邏輯執(zhí)行單元,這系列操作要么全部執(zhí)行,要么全部放棄執(zhí)行。事務(wù)本身具有原子性(Atomicity)、一致性(Consistentcy)、隔離性(Isolation)和持續(xù)性(Durability),這4個特性也簡稱為ACID性。13.6.1MySQL對事務(wù)的支持

在MySQL中,如果要應(yīng)用事務(wù)處理,則應(yīng)該按照以下順序輸入命令:(1)取消自動提交,執(zhí)行:SETAUTOCOMMIT=0。這樣所有的更新指令并不會立刻發(fā)送到數(shù)據(jù)表中,而只是存在當前的session中。(2)開啟事務(wù),執(zhí)行STARTTRANSACTION或BEGIN。(3)編寫SQL語句,可以在編寫的SQL語句之間記錄事務(wù)的保存點,使用SAVEPOINT指令。13.6.1MySQL對事務(wù)的支持(4)提交事務(wù)。如果確信數(shù)據(jù)庫的修改沒有任何的錯誤,則使用COMMIT提交事務(wù)。在提交之前對數(shù)據(jù)庫所做的全部操作都將保存在session中。(5)事務(wù)回滾。如果發(fā)現(xiàn)執(zhí)行的SQL語句有錯誤,則使用ROLLBACK命令全部撤銷,或者使用ROLLBACKTOSAVEPOINT記錄點,讓其回滾到指定的位置。13.6.2執(zhí)行JDBC的事務(wù)處理JDBC連接也提供了事務(wù)支持,JDBC連接的事務(wù)支持由Connection提供。Connection默認打開自動提交,即關(guān)閉事務(wù)。在這種情況下,每條SQL語句一旦執(zhí)行,便會立即提交到數(shù)據(jù)庫,永久生效,無法對其進行回滾操作??梢哉{(diào)用Connection的setAutoCommit()方法來關(guān)閉自動提交,開始事務(wù)。13.6.2執(zhí)行JDBC的事務(wù)處理例:不使用事務(wù)處理,對數(shù)據(jù)庫進行操作。13.6.2執(zhí)行JDBC的事務(wù)處理程序的運行結(jié)果報錯,此時查詢數(shù)據(jù)庫中的信息,沒有使用事務(wù)處理,只插入了部分的數(shù)據(jù)。查詢結(jié)果如下圖所示:

程序只將未出錯的SQL語句正確執(zhí)行了,但是這些語句是一個整體,應(yīng)該是集體成功后才有效。很明顯,這樣的操作不符合用戶的要求。使用了事務(wù)之后,此問題即可解決。13.6.2執(zhí)行JDBC的事務(wù)處理例:使用事務(wù)處理,對數(shù)據(jù)庫進行操作。13.6.2執(zhí)行JDBC的事務(wù)處理

以上程序運行結(jié)果:執(zhí)行失敗,事務(wù)回滾。

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論