




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE1PAGE6實(shí)驗(yàn)7通過(guò)JDBC訪問(wèn)數(shù)據(jù)庫(kù)實(shí)驗(yàn)?zāi)康?.通過(guò)閱讀本課件中的知識(shí)點(diǎn)和例題,結(jié)合正在學(xué)習(xí)的數(shù)據(jù)庫(kù)知識(shí),了解數(shù)據(jù)庫(kù)存儲(chǔ)的特點(diǎn)、數(shù)據(jù)庫(kù)訪問(wèn)的概念和方法、JDBC的概念和術(shù)語(yǔ),以及如何通過(guò)以JDBC為媒介對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),實(shí)現(xiàn)數(shù)據(jù)的查詢和記錄的更新。2.參考本課件給出的兩個(gè)例題和教材上的例8.2,編寫Java程序,實(shí)現(xiàn)對(duì)SQLServer數(shù)據(jù)庫(kù)訪問(wèn);通過(guò)修改Students的數(shù)據(jù)源從文件到數(shù)據(jù)庫(kù),練習(xí)如何在應(yīng)用程序中通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)來(lái)獲得所需要的數(shù)據(jù)。知識(shí)點(diǎn)和例題1.數(shù)據(jù)庫(kù)訪問(wèn)概述⑴數(shù)據(jù)庫(kù)存儲(chǔ)的特點(diǎn)相對(duì)于用文件存儲(chǔ)數(shù)據(jù)和實(shí)現(xiàn)I/O,采用數(shù)據(jù)庫(kù)技術(shù)存儲(chǔ)并與應(yīng)用程序交換數(shù)據(jù)具有如下特點(diǎn):①相關(guān)的但不同類型的數(shù)據(jù)被集成化;②數(shù)據(jù)與程序具有相對(duì)的獨(dú)立性;③可實(shí)現(xiàn)多個(gè)程序和用戶對(duì)數(shù)據(jù)的共享;④數(shù)據(jù)的冗余度?。虎荼苊饬瞬l(fā)訪問(wèn)中數(shù)據(jù)的不一致性;⑥通過(guò)設(shè)置權(quán)限可對(duì)數(shù)據(jù)實(shí)施安全性保護(hù);⑦有利于保證數(shù)據(jù)的完整性;⑧可發(fā)現(xiàn)存儲(chǔ)故障并恢復(fù)到正常狀態(tài)。⑵數(shù)據(jù)庫(kù)訪問(wèn)的概念數(shù)據(jù)庫(kù)的創(chuàng)建和維護(hù)、數(shù)據(jù)的訪問(wèn)和更新,既可以在數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)下進(jìn)行,也可以在應(yīng)用程序中實(shí)現(xiàn),后者更加具有現(xiàn)實(shí)意義。所謂數(shù)據(jù)庫(kù)訪問(wèn),就是應(yīng)用程序以某種方式與數(shù)據(jù)庫(kù)交互,使用和更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。實(shí)現(xiàn)訪問(wèn)的必要條件是操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)和程序設(shè)計(jì)語(yǔ)言中有著對(duì)訪問(wèn)的支持,這便是數(shù)據(jù)庫(kù)接口或數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,在Java中,這種接口稱為JDBC,它是由java.sql包中的一組類和接口組成的。⑶數(shù)據(jù)庫(kù)操作類型和操作方式數(shù)據(jù)庫(kù)訪問(wèn)應(yīng)具有與DBMS對(duì)等的一系列操作,基本操作為數(shù)據(jù)的檢索、修改、插入和刪除;輔助操作包括數(shù)據(jù)庫(kù)定義、數(shù)據(jù)轉(zhuǎn)儲(chǔ)等。本章僅介紹前一類操作。在多數(shù)程序設(shè)計(jì)語(yǔ)言中,數(shù)據(jù)庫(kù)訪問(wèn)操作可通過(guò)兩種方式實(shí)現(xiàn),一種是通過(guò)類庫(kù)中的類所提供的SQL語(yǔ)句執(zhí)行機(jī)制執(zhí)行SQL,二是通過(guò)類庫(kù)中的類所提供的一系列方法。對(duì)某些操作而言,二者可以相互替換,對(duì)另一些操作而言,則只能使用其中的一種。而前者往往更具有普遍意義。2.Java數(shù)據(jù)庫(kù)訪問(wèn)⑴ODBC和JDBCJDBC(JavaDatabaseConnectivity)是SUN為Java開發(fā)的數(shù)據(jù)庫(kù)連接解決方案,它通過(guò)JDBC-ODBC橋接器,使用微軟的ODBC(OpenDatabaseConnectivity)來(lái)實(shí)現(xiàn)與不同數(shù)據(jù)庫(kù)的連接,但在編程方面要較ODBC更加方便。JDBC內(nèi)嵌的SQL為程序員提供了一個(gè)純Java的數(shù)據(jù)庫(kù)編程接口(由一組類和接口構(gòu)成),通過(guò)它們,JDBC實(shí)現(xiàn)了三個(gè)最基本的數(shù)據(jù)庫(kù)訪問(wèn)功能:建立與數(shù)據(jù)庫(kù)的連接、執(zhí)行SQL語(yǔ)句和處理執(zhí)行結(jié)果。⑵JDBC的構(gòu)成java.sql中類和接口的名稱和基本功能是:名稱類型基本功能java.sql.DriverManager類加載JDBC、建立與新的數(shù)據(jù)庫(kù)的連接java.sql.Connection接口處理與特定數(shù)據(jù)庫(kù)的連接java.sql.Statement接口在指定的連接中處理SQL語(yǔ)句java.sql.PreparedStatement子接口處理預(yù)編譯的SQL語(yǔ)句java.sql.CallableStatement子接口處理數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程java.sql.ResultSet接口處理數(shù)據(jù)庫(kù)操作結(jié)果集⑶JDBCdriver上述類和接口都是抽象的,在不同環(huán)境下與數(shù)據(jù)庫(kù)的連接,還要靠JDBCDriver來(lái)實(shí)現(xiàn):JDBCDriver名稱連接機(jī)制和環(huán)境要求JDBC-ODBCBridge通過(guò)ODBC與數(shù)據(jù)庫(kù)實(shí)現(xiàn)連接,要求每臺(tái)客戶機(jī)都裝有ODBC驅(qū)動(dòng)程序。Native-APIpartly-JavaDriver將JDBC指令轉(zhuǎn)化為DBMS操作形式,要求客戶機(jī)裝有相應(yīng)的DBMS。JDBC-NetAll-JavaDriver將JDBC指令轉(zhuǎn)化為獨(dú)立于DBMS的網(wǎng)絡(luò)協(xié)議,再由服務(wù)器轉(zhuǎn)化為特定的DBMS協(xié)議??蛇B接到不同的數(shù)據(jù)庫(kù).Native-protocolAll-JavaDriver將JDBC指令轉(zhuǎn)化為網(wǎng)絡(luò)協(xié)議,并由DBMS直接使用。適用于局域網(wǎng)。⑷通過(guò)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的步驟①創(chuàng)建指定數(shù)據(jù)源的URL要?jiǎng)?chuàng)建與數(shù)據(jù)庫(kù)的連接,首先要?jiǎng)?chuàng)建針對(duì)指定數(shù)據(jù)源的URL(UniformResoureLocator),創(chuàng)建URL的一般形式如下:Stringurl=jdbc:odbc:數(shù)據(jù)源名稱;假設(shè)在ODBC管理器中設(shè)置的數(shù)據(jù)源名稱為Student,則創(chuàng)建語(yǔ)句為Stringurl="jdbc:odbc:Student";數(shù)據(jù)源名稱可以在Windows的“控制面板-管理工具-數(shù)據(jù)源(ODBC)”中針對(duì)特定的數(shù)據(jù)庫(kù)指定,操作為:添加-MicrosoftAccessDriver-完成,輸入數(shù)據(jù)源名,選擇(數(shù)據(jù)庫(kù))-確定。②加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序?yàn)榱诉B接到具體的數(shù)據(jù)庫(kù),JDBC必須首先加載與該數(shù)據(jù)庫(kù)相應(yīng)的驅(qū)動(dòng)程序,代碼形式如下:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");其中Class是包java.lang中的一個(gè)類:它通過(guò)調(diào)用靜態(tài)方法forName,加載sun.jdbc.odbc包中的JdbcOdbcDriver類來(lái)建立JDBC-ODBC橋接器。③創(chuàng)建數(shù)據(jù)庫(kù)連接調(diào)用DriverManager類中的方法getConnection建立與具體數(shù)據(jù)庫(kù)的連接,并將該連接的引用賦給Connection類的對(duì)象,代碼形式如下:Connectioncon=DriverManager.getConnection("URL","用戶名","口令");例如對(duì)于上述的URL和Access數(shù)據(jù)庫(kù),可以是:Connectioncon=DriverManager.getConnection(url,"user","password");④創(chuàng)建語(yǔ)句對(duì)象聲明一個(gè)Statement對(duì)象,通過(guò)Connection的對(duì)象調(diào)用方法createStatement,并將返回值賦給這個(gè)Statement對(duì)象,代碼形式可以是以下兩種:Statementstate=con.createStatement();Statementstate=con.createStatement(int
resultSetType,int
resultSetConcurrency);其中:變量取值意義resultSetTypeResultSet.TYPE_FORWARD_ONLY(默認(rèn))游標(biāo)只能向下滾動(dòng)ResultSet.TYPE_SCROLL_INSENSITIVE上下滾動(dòng),不同步更新ResultSet.TYPE_SCROLL_SENSITIVE上下滾動(dòng),同步更新resultSetConcurrencyResultSet.CONCUR_READ_ONLY(默認(rèn))不允許更新數(shù)據(jù)庫(kù)ResultSet.CONCUR_UPDATABLE允許更新數(shù)據(jù)庫(kù)⑤執(zhí)行SQL查詢有了Statement對(duì)象后,就可以通過(guò)它調(diào)用Statement的方法來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作,操作命令由SQL語(yǔ)句給出,查詢結(jié)果保存在ResultSet類(查詢結(jié)果數(shù)據(jù)集)的對(duì)象中返回,假設(shè)一個(gè)SQL語(yǔ)句定義在字符串sql中:Stringsql="SELECT*FROM學(xué)生";則ResultSetresult=state.executeUpdate(sql);將從學(xué)生表中查詢出所有數(shù)據(jù)并保存在對(duì)象result中⑥處理查詢結(jié)果利用resultSet類提供的一系列方法,可以對(duì)查詢結(jié)果數(shù)據(jù)集進(jìn)行各種操作,例如:方法原型功能說(shuō)明StringgetString(int
columnIndex)throwsSQLException獲取字符串intgetInt(int
columnIndex)throwsSQLException獲取整型數(shù)doublegetDouble(int
columnIndex)throwsSQLException獲取雙精度數(shù)intgetRow()throwsSQLException獲取當(dāng)前行編號(hào)booleanlast()throwsSQLException移動(dòng)游標(biāo)到末行voidbeforeFirst()throwsSQLException移動(dòng)游標(biāo)到首行之前booleannext()throwsSQLException移動(dòng)游標(biāo)到下一行voidclose()throwsSQLException關(guān)閉結(jié)果集⑦更新、添加和刪除記錄使用UPDATE、INSERTINTO、DELETEFROM等SQL語(yǔ)句,也可對(duì)數(shù)據(jù)庫(kù)的某個(gè)表進(jìn)行記錄的更新、插入和刪除操作。此時(shí)代替聲明ResultSet對(duì)象并通過(guò)Statement對(duì)象調(diào)用executeQuery方法執(zhí)行SQL語(yǔ)句并處理查詢結(jié)果,是通過(guò)Statement對(duì)象調(diào)用executeUpdate方法來(lái)更新數(shù)據(jù)庫(kù),例如:sql="UPDATE學(xué)生SET性別='男'WHERE學(xué)ID=1";state.executeUpdate(sql);3.數(shù)據(jù)庫(kù)訪問(wèn)實(shí)例⑴Student數(shù)據(jù)庫(kù)我們嘗試運(yùn)用上面的步驟來(lái)訪問(wèn)一個(gè)Access數(shù)據(jù)庫(kù)Student,其中有4個(gè)表,E-R圖為:⑵設(shè)計(jì)查詢?cè)摂?shù)據(jù)庫(kù)中存放著061431和061432兩個(gè)班學(xué)生的基本資料和“C++程序設(shè)計(jì)”、“程序設(shè)計(jì)基礎(chǔ)”兩門課的成績(jī)數(shù)據(jù)?,F(xiàn)要從該數(shù)據(jù)庫(kù)中查詢出兩個(gè)班所有同學(xué)“C++程序設(shè)計(jì)”(課程ID=2)的實(shí)驗(yàn)報(bào)告和期末考試成績(jī),設(shè)計(jì)SQL語(yǔ)句如下:SELECT學(xué)生.學(xué)號(hào),學(xué)生.姓名,成績(jī).實(shí)驗(yàn)報(bào)告,成績(jī).期末考試,成績(jī).總評(píng)成績(jī)FROM學(xué)生INNERJOIN(課程INNERJOIN成績(jī)ON課程.課程ID=成績(jī).課程ID)ON學(xué)生.學(xué)生ID=成績(jī).學(xué)生IDWHERE(((課程.課程ID)=2));⑶在Java中執(zhí)行查詢importjava.sql.*;publicclassUseJdbcQuery{ publicstaticvoidmain(String[]args){ Stringurl="jdbc:odbc:Student"; Stringsql="SELECT學(xué)生.學(xué)號(hào),學(xué)生.姓名,成績(jī).實(shí)驗(yàn)報(bào)告,成績(jī).期末考試FROM學(xué)生INNERJOIN(課程INNERJOIN成績(jī)ON課程.課程ID=成績(jī).課程ID)ON學(xué)生.學(xué)生ID=成績(jī).學(xué)生IDWHERE(((課程.課程ID)=2));"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connectioncon=DriverManager.getConnection(url,"user","password"); Statementstate=con.createStatement(); ResultSetresult=state.executeQuery(sql); while(result.next()){ StringID=result.getString("學(xué)號(hào)"); Stringname=result.getString("姓名"); doubleexperiment=result.getDouble("實(shí)驗(yàn)報(bào)告"); doubleexam=result.getDouble("期末考試"); System.out.println(result.getRow()+"\t"+ID+"\t"+ name+"\t"+experiment+"\t"+exam); } result.close(); state.close(); con.close(); } catch(java.lang.Exceptionex){ ex.printStackTrace(); } }}⑷在Java中更新、添加和刪除記錄importjava.sql.*;publicclassUseJdbcUpdate{ publicstaticvoidmain(String[]args){ Stringurl,sql; url="jdbc:odbc:Student"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connectioncon=DriverManager.getConnection(url,"user","password"); Statementstate=con.createStatement(); sql="UPDATE成績(jī)SET期末考試=100WHERE學(xué)生ID=1AND課程ID=1"; state.executeUpdate(sql); sql="INSERTINTO學(xué)生VALUES(88,2,'06143245','張三','男')"; state.executeUpdate(sql); sql="INSERTINTO學(xué)生VALUES(89,2,'06143146','李四','女')"; state.executeUpdate(sql); sql="DELETEFROM學(xué)生WHERE學(xué)號(hào)='06143146'"; state.executeUpdate(sql); state.close(); co
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)升級(jí)項(xiàng)目合同借款協(xié)議
- 合同管理培訓(xùn)與人才培養(yǎng)的建議
- 餐飲業(yè)原料采購(gòu)合同(安全食品專用)
- 勞動(dòng)合同范本:外來(lái)專業(yè)技術(shù)人才
- 商業(yè)地皮交易合同書
- 蘇州市模范勞動(dòng)合同樣本
- 四人合作創(chuàng)業(yè)股份分配合同范本
- 年度合作合同:速記服務(wù)條款
- 液化氣采購(gòu)框架合同
- 購(gòu)物中心投資合同樣本
- 護(hù)理質(zhì)控護(hù)士競(jìng)聘
- 醫(yī)學(xué)課件炎癥性腸病4
- 2019年青島版(六三制)五年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教案
- 2024年4月自考00263外國(guó)法制史試題及答案
- 《井中分布式光纖聲波傳感數(shù)據(jù)采集規(guī)程》標(biāo)準(zhǔn)報(bào)批稿
- 人音版 音樂(lè) 八年級(jí)下冊(cè) 第一單元 我和你教案
- 教育戲劇在小學(xué)教育中的應(yīng)用研究 論文
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案
- 2024年青島港灣職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- python程序設(shè)計(jì)-說(shuō)課
- 《糖尿病患者血脂管理中國(guó)專家共識(shí)(2024版)》解讀
評(píng)論
0/150
提交評(píng)論