版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第12章JDBC數(shù)據(jù)庫編程《Java面向?qū)ο蟪绦蛟O(shè)計(jì)案例教程(第2版)》目錄/Contents12.112.212.3JDBC概述JDBC訪問數(shù)據(jù)庫編寫JDBC代碼思政要點(diǎn)/Point數(shù)據(jù)安全
在數(shù)據(jù)庫編程中保護(hù)數(shù)據(jù)安全和個(gè)人隱私的重要性,遵守相關(guān)法律法規(guī)。團(tuán)隊(duì)合作
提升團(tuán)隊(duì)合作和溝通能力,有效協(xié)作解決數(shù)據(jù)庫設(shè)計(jì)和實(shí)現(xiàn)中的問題。持續(xù)學(xué)習(xí)
關(guān)注數(shù)據(jù)庫技術(shù)的最新發(fā)展,保持持續(xù)學(xué)習(xí)的態(tài)度,適應(yīng)技術(shù)進(jìn)步。社會(huì)責(zé)任利用數(shù)據(jù)庫技術(shù)解決社會(huì)問題,為社會(huì)公共利益作出貢獻(xiàn)。JDBC概述12.1
Java數(shù)據(jù)庫連接(JavaDatabaseConnectivity,JDBC)是一種用于執(zhí)行SQL語句的JavaAPI,它可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問編程由一組用Java語言編寫的類與接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具與接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。12.1.1JDBC的概念
早期Sun公司的程序員想編寫一套可以連接所有數(shù)據(jù)庫的API,但是當(dāng)他們剛剛開始編寫時(shí)就發(fā)現(xiàn)這是不可能完成的任務(wù),因?yàn)楦鱾€(gè)廠商的數(shù)據(jù)庫服務(wù)器差異太大了。后來Sun公司開始與數(shù)據(jù)庫廠商討論,最終得出的方案-由Sun公司提供一套訪問數(shù)據(jù)庫的規(guī)范(即一組接口),并提供連接數(shù)據(jù)庫的協(xié)議標(biāo)準(zhǔn),各個(gè)數(shù)據(jù)庫廠商會(huì)遵循Sun公司的規(guī)范提供一套訪問自己公司的數(shù)據(jù)庫服務(wù)器的API。Sun公司提供的規(guī)范命名為JDBC,而各個(gè)廠商提供遵循了JDBC規(guī)范且可以訪問自己數(shù)據(jù)庫的API被稱之為驅(qū)動(dòng),如圖12-1所示。JDBC是接口,而JDBC驅(qū)動(dòng)才是接口的實(shí)現(xiàn),沒有驅(qū)動(dòng)就無法完成數(shù)據(jù)庫連接。每個(gè)數(shù)據(jù)庫廠商都有自己的驅(qū)動(dòng),用來連接自己公司的數(shù)據(jù)庫。當(dāng)然,也有第三方公司專門為某一數(shù)據(jù)庫提供的驅(qū)動(dòng),這樣的驅(qū)動(dòng)往往不是開源免費(fèi)的。12.1.2JDBC的原理Driver接口是所有JDBC驅(qū)動(dòng)程序必須實(shí)現(xiàn)的接口,該接口專門提供給數(shù)據(jù)庫廠商使用。需要注意的是,在編寫JDBC程序時(shí),必須要把所使用的數(shù)據(jù)庫驅(qū)動(dòng)程序或類庫加載到項(xiàng)目的classpath中(這里指MySQI驅(qū)動(dòng)JAR包)。12.1.3JDBC常用API1.Driver接口2..DriverManager接口DriverManager接口用于加載JDBC驅(qū)動(dòng)程序、創(chuàng)建與數(shù)據(jù)庫的連接。在DriverManager接口中,定義了兩個(gè)比較重要的靜態(tài)方法,如表12-1所示。方法名稱功能描述staticvoidregisterDriver(Driverdriver)用于向DriverManager注冊(cè)給定的JDBC驅(qū)動(dòng)程序 staticConnectiongetConnection(Stringurl,Stringuser,Stringpwd)用于建立和數(shù)據(jù)庫的連接,并返回表示連接的Connection對(duì)象Statement接口用于執(zhí)行靜態(tài)的SQL語句,并返回一個(gè)結(jié)果對(duì)象。Statement接口對(duì)象可以通過Connection實(shí)例的createStatement()方法獲得,該對(duì)象會(huì)把靜態(tài)的SQL語句發(fā)送到數(shù)據(jù)庫中編譯執(zhí)行,然后返回?cái)?shù)據(jù)庫的處理結(jié)果。Statement接口提供了3個(gè)常用的執(zhí)行SQL語句的方法,如表12-3所示。12.1.3JDBC常用API4.Statement接口方法名稱功能描述booleanexecute(Stringsql)用于執(zhí)行各種SQL語句。該方法返回一個(gè)boolean類型的值,如果為true,表示所執(zhí)行的SQL語句有查詢結(jié)果,可以通過Statement的getResultSet()方法獲得查詢結(jié)果 intexecuteUpdate(Stringsql) 用于執(zhí)行SQL中的insert、update和delete語句。該方法返回一一個(gè)int)類型的值,表示數(shù)據(jù)庫中受該SQL語句影響的記錄條數(shù) ResultSetexecuteQuery(Stringsql)用于執(zhí)行SQL中的select語句。該方法返回一個(gè)表示查詢結(jié)果的ResultSet對(duì)象Connection接口用于處理與特定數(shù)據(jù)庫的連接,Connection對(duì)象是表示數(shù)據(jù)庫連接的對(duì)象,只有獲得該連接對(duì)象,才能訪問并操作數(shù)據(jù)庫。Connection接口的常用方法如表12-2所示。12.1.3JDBC常用API5.PreparedStatement接口方法名稱功能描述StatementcreateStatement()用于創(chuàng)建一個(gè)Statement對(duì)象將SQL語句發(fā)送到數(shù)據(jù)庫PreparedStatementprepareStatement(Stringsql) 用于創(chuàng)建一個(gè)PreparedStatement對(duì)象將參數(shù)化的SQL語句發(fā)送到數(shù)據(jù)庫 CallableStatementprepareCall(Stringsql)用于創(chuàng)建一個(gè)CallableStatement對(duì)象來調(diào)用數(shù)據(jù)庫存儲(chǔ)過程ResuliSet接口用于保存JDBC執(zhí)行查詢時(shí)返回的結(jié)果集,該結(jié)果集封裝在一個(gè)邏輯表格中。在ResuhSet接口內(nèi)部有一個(gè)指向表格數(shù)據(jù)行的游標(biāo)(或指針),ResultSet對(duì)象初始化時(shí),游標(biāo)在表格的第一行之前,用next()方法可以使游標(biāo)下移一行。如果下一行沒有數(shù)據(jù),則返回false。在應(yīng)用程序中經(jīng)常使用next(方法作為while循環(huán)的條件來迭代ResultSet結(jié)果集。ResultSet接口的常用方法如表12-5所示。12.1.3JDBC常用API6.ResuliSet接口方法名稱功能描述StringgetString(intcolumnIndex) 用于獲取指定字段的String類型的值,參數(shù)columnIndex代表字段的索引 StringgetString(StringcolumnName) 用于獲取指定字段的String類型的值,參數(shù)columnName代表字段的名稱 intgetlnt(intcolumnIndex) 用于獲取指定字段的int類型的值,參數(shù)columnindex代表字段的索引 intgetInt(StringcolumnName) 用于獲取指定字段的int類型的值,參數(shù)columnName代表字段的名稱 booleannext()將游標(biāo)從當(dāng)前位置下移一行 JDBC訪問數(shù)據(jù)庫12.2在連接數(shù)據(jù)庫之前,要加載數(shù)據(jù)庫的驅(qū)動(dòng)程序到JVM(Java虛擬機(jī))。加載操作可以通過java.lang.Class類的靜態(tài)方法forName(StringclassName)或DriverManager類的靜態(tài)方法registerDriver(Driverdriver)實(shí)現(xiàn),具體示例如下:DriverManager.registerDriver(Driverdriver);或Class.forName("DriverName");在實(shí)際開發(fā)中,常用第2種方式注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)程序,DriverName表示數(shù)據(jù)庫的驅(qū)動(dòng)類。以MySQL數(shù)據(jù)庫為例,MySQL驅(qū)動(dòng)類在6.0.2版本之前為com.mysqljdbc.Driver,而在6.0.2版本之后為com.mysql.ej.jdbc.Driver,要根據(jù)自己數(shù)據(jù)庫版本選擇相應(yīng)的驅(qū)動(dòng)類。12.2.1實(shí)現(xiàn)JDBC程序1.加載并注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)獲取數(shù)據(jù)庫連接的具體方式如下:Connectionconn-DriverManager.getConnection(Stringurl,stringuser,Stringpwd);從上述代碼可以看出,getConnection()方法有3個(gè)參數(shù),分別表示連接數(shù)據(jù)庫的地址、登錄數(shù)據(jù)庫的用戶名和密碼。以MySQL數(shù)據(jù)庫為例,MySQL數(shù)據(jù)庫地址的格式如下:jdbc:mysql://hostname:port/databasename在上面的代碼中,jdbc:mysql:是固定的寫法;mysql是指MySQL數(shù)據(jù)庫;hostname是指主機(jī)的名稱(如果數(shù)據(jù)庫在本機(jī)中,hostname可以為localhost或127.0.0.1;如果要連接的數(shù)據(jù)庫在其他計(jì)算機(jī)上,hostname為所要連接計(jì)算機(jī)的IP);port是指連接數(shù)據(jù)庫的端口號(hào)(MySQL端口號(hào)默認(rèn)為3306);databasename是指MySQL中相應(yīng)數(shù)據(jù)庫的名稱。12.2.1實(shí)現(xiàn)JDBC程序2.通過DriverManager獲取數(shù)據(jù)庫連接Connection創(chuàng)建Statement對(duì)象的方法有以下3個(gè)。
(1)createStatement():創(chuàng)建基本的Statement對(duì)象。
(2)prepareStatement():創(chuàng)建PreparedStatement對(duì)象。
(3)prepareCall():創(chuàng)建CallableStatement對(duì)象。以創(chuàng)建基本的Statement對(duì)象為例,創(chuàng)建方式如下:Statementstmt=conn.createStatement();12.2.1實(shí)現(xiàn)JDBC程序3.通過Connection對(duì)象獲取Statement對(duì)象
所有的Statement都有以下3種執(zhí)行SQL語句的方法。(1)execute():可以執(zhí)行任何SQL語句。(2)executeQuery():通常執(zhí)行查詢語句,執(zhí)行后返回代表結(jié)果集的ResultSet對(duì)象。(3)exccuteUpdate():主要用于執(zhí)行DML和DDL語句。執(zhí)行DML語句,如INSERT、UPDATE或DELET時(shí),返回受SQL語句影響的行數(shù);執(zhí)行DDL語句返回0。以executeQuery()方法為例,executeQuery()方法調(diào)用形式如下:ResultSetrs=stmt.executeQuery(sql);//執(zhí)行SQL語句,獲取結(jié)果集ResultSet12.2.1實(shí)現(xiàn)JDBC程序4.使用Statement執(zhí)行SQL語句如果執(zhí)行的SQL語句是查詢語句,執(zhí)行結(jié)果將返回一個(gè)ResultSet對(duì)象,該對(duì)象保存了SQL語句查詢的結(jié)果。程序可以通過操作該ResultSet對(duì)象取出查詢結(jié)果。12.2.1實(shí)現(xiàn)JDBC程序5.操作ResultSet結(jié)果集6.關(guān)閉連接,釋放資源每次操作數(shù)據(jù)庫結(jié)束后都要關(guān)閉數(shù)據(jù)庫連接,釋放資源,關(guān)閉順序和聲明順序相反。需要關(guān)閉的資源包括ResultSet、Statement和Connection等。至此,JDBC程序的大致實(shí)現(xiàn)步驟已經(jīng)講解完了。編寫JDBC代碼12.312.3.1將數(shù)據(jù)庫驅(qū)動(dòng)開發(fā)包引入到項(xiàng)目工程中編寫代碼之前,我們首先需要將數(shù)據(jù)庫廠商提供的驅(qū)動(dòng)程序jar文件加入到開發(fā)工具的構(gòu)建路徑中,以便程序運(yùn)行時(shí)能夠準(zhǔn)確找到驅(qū)動(dòng)并使用。常見的構(gòu)建路徑添加方法有3種。1.絕對(duì)路徑引入(1)在項(xiàng)目上單擊鼠標(biāo)右鍵,選擇Buildpath擴(kuò)展,選擇最后一項(xiàng)ConfigureBuildPath,在Libraries選項(xiàng)卡中,選擇右側(cè)第二項(xiàng)AddExternalJARs,在當(dāng)前頁面下,找到驅(qū)動(dòng)程序jar文件,如圖12-2,12-3所示。(2)完成上述操作后,確定退出。引入完畢的效果如圖12-4所示。12.3.1將數(shù)據(jù)庫驅(qū)動(dòng)開發(fā)包引入到項(xiàng)目工程中圖12-2構(gòu)建路徑
圖12-3瀏覽jar文件圖12-4
引入完畢效果12.3.1將數(shù)據(jù)庫驅(qū)動(dòng)開發(fā)包引入到項(xiàng)目工程中2.使用類庫添加(1)在項(xiàng)目上單擊鼠標(biāo)右鍵,選擇Buildpath擴(kuò)展,選擇最后一項(xiàng)ConfigureBuildPath,在Libraries選項(xiàng)卡中,選擇右側(cè)第四項(xiàng)AddLibrary,選擇UserLibrary,點(diǎn)擊Next。在下一界面中,選擇UserLibraries。如圖12-5,12-6所示。
圖12-5項(xiàng)目類庫
圖12-6新建用戶庫12.3.1將數(shù)據(jù)庫驅(qū)動(dòng)開發(fā)包引入到項(xiàng)目工程中2.使用類庫添加(2)新建用戶Library,輸入名稱,確定后,選擇AddJARs,選擇jar文件,逐層確定后退出。如圖12-7,12-8所示。
圖12-7新建用戶庫
圖12-8新建用戶庫12.3.1將數(shù)據(jù)庫驅(qū)動(dòng)開發(fā)包引入到項(xiàng)目工程中3.本項(xiàng)目內(nèi)相對(duì)路徑引入(1)項(xiàng)目上單擊鼠標(biāo)右鍵,選擇新建->Folder,輸入lib作為文件夾的名字。將jar文件復(fù)制粘貼進(jìn)入lib文件夾,如圖12-9所示。在jar文件上右鍵單擊,選擇buildpath->addtobuildpath,如圖12-10所示。12.3.2準(zhǔn)備測(cè)試數(shù)據(jù)在此例中,MySQL數(shù)據(jù)庫連接的用戶名是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025吉林大學(xué)白求恩醫(yī)學(xué)部機(jī)關(guān)面向校內(nèi)招聘正科級(jí)干部1人備考考試試題及答案解析
- 2025重慶大學(xué)醫(yī)院勞務(wù)派遣醫(yī)技人員招聘4人備考考試試題及答案解析
- 2023檢查實(shí)施方案十篇
- 網(wǎng)商家的合同范本
- 網(wǎng)格員聘請(qǐng)協(xié)議書
- 耗材供銷合同范本
- 職工不坐班協(xié)議書
- 聯(lián)合中標(biāo)合同范本
- 聘用dj合同范本
- 聘用護(hù)士合同范本
- 2025年齊齊哈爾市總工會(huì)工會(huì)社會(huì)工作者招聘39人考試筆試模擬試題及答案解析
- 慈溪白骨案課件
- 2024南江輔警考試真題及答案
- 小兒腎挫傷的護(hù)理措施
- 2025中原證券股份有限公司招聘55人筆試考試參考試題及答案解析
- 醫(yī)療不良事件上報(bào)與績效聯(lián)動(dòng)策略
- 學(xué)堂在線 雨課堂 學(xué)堂云 科研倫理與學(xué)術(shù)規(guī)范 章節(jié)測(cè)試答案
- 骨相美學(xué)理論課件
- 2025年空氣采樣操作流程試題有答案
- 2025年度數(shù)字化城市管理信息系統(tǒng)安全自查報(bào)告
- 營銷沙盤實(shí)訓(xùn)報(bào)告
評(píng)論
0/150
提交評(píng)論