【學(xué)習(xí)課件】第10講Java數(shù)據(jù)庫訪問
《【學(xué)習(xí)課件】第10講Java數(shù)據(jù)庫訪問》由會員分享,可在線閱讀,更多相關(guān)《【學(xué)習(xí)課件】第10講Java數(shù)據(jù)庫訪問(32頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、wwwits.tzc- 第10講Java數(shù)據(jù)庫訪問 3 Java 學(xué)習(xí)目的與要求 □深刻理解JDBC的概念及JDBC API 主要內(nèi)容 □熟練掌握J(rèn) DBC應(yīng)用程序開發(fā)流程 □熟練掌握應(yīng)用JDBC實現(xiàn)數(shù)據(jù)庫記錄 的插入.刪除和修改操作 □熟練掌握應(yīng)用JDBC查詢數(shù)據(jù)庫記錄 JDBC v*ww.its JDBC(Java Database Connectivity)是一個獨立于特定數(shù)據(jù)庫 管理系統(tǒng)的.通用的SQL數(shù)據(jù)庫存取和操作的公共接口( 一
2、 組API),定義了用來訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)Java類庫,使用這 個類庫可以以一種標(biāo)準(zhǔn)的方法.方便地訪問數(shù)據(jù)庫資源(在 java.sql類包中)。 JDBC為訪問不同的數(shù)據(jù)庫提供了一種統(tǒng)一的途徑,象 ODBC(Open Database Connectivi切一樣 # JDBC對開發(fā)者屏 蔽了一些細節(jié)問題。 JDBC的目標(biāo)是使應(yīng)用程序開發(fā)人員使用JDBC可以連接任何 提供了JDBC驅(qū)動程序的數(shù)據(jù)庫系統(tǒng),這樣就使得程序員無需 對特定的數(shù)據(jù)庫系統(tǒng)的特點有過多的了解,從而大大簡化和 加快了開發(fā)過程。 JDBC 開放數(shù)據(jù)庫互連(ODBC )是為了實現(xiàn)異構(gòu)數(shù)據(jù)庫互連而由Microsoft公司推
3、出的一 種標(biāo)準(zhǔn),它是一個單一的.公共的編程接口。ODBC提供不同的程序以存取不同的 數(shù)據(jù)庫,但只提供一種應(yīng)用編程接口( API )給應(yīng)用程序。 應(yīng)用程瘵 驅(qū)動程瘵管理器 驅(qū)動程序 驅(qū)動程陰 驅(qū)動程序 數(shù)據(jù)源 數(shù)據(jù)源 數(shù)據(jù)源 ODBC ODBC的體系結(jié)構(gòu)含有四個部件: 應(yīng)用程序(Application):執(zhí)行ODBC函數(shù)的調(diào)用 和處理,提交SQL語句并檢索結(jié)果。 驅(qū)動程序管理器(Driver Manager):為應(yīng)用程 屋裝載驅(qū)動程屋。 驅(qū)動程序(Driver):驅(qū)動程底是實現(xiàn)ODBC函數(shù) 調(diào)用和同數(shù)據(jù)源交互作用的動態(tài)連接庫,它執(zhí)行ODBC 函數(shù)調(diào)用,提交SQL請求到指
4、定的數(shù)據(jù)源.并把結(jié)果 返回給應(yīng)用程瘵。如果需要,驅(qū)動程底也可改變應(yīng)用 程寤的請求,以和特定的DBMS的語法匹配。 數(shù)據(jù)源(Data Source ):由用戶需要存取的數(shù)據(jù) 和與之相連的操作系統(tǒng).DBMS及存取DBMS的網(wǎng)絡(luò)平臺 組成。 基礎(chǔ) JDBC 與ODBC相類似z JDBC接口( API )也包括兩個層次: ■面向應(yīng)用09A1 : Java API ,抽象接口,供應(yīng)用程序開發(fā)人員使用(連 接數(shù)據(jù)庫,執(zhí)行SQL語句,獲得結(jié)果)o ■面向數(shù)據(jù)庫的AP : Java Driver API,供開發(fā)商開發(fā)數(shù)據(jù)庫驅(qū)動程序用。 與ODBC相比f JDBC沒有了走 制的"
5、數(shù)據(jù)源" 的概念,而是直 接在應(yīng)用程序中 加載驅(qū)動程序并 連接特定的數(shù)據(jù) 庫。 7 JDBC 基礎(chǔ):基本工作步驟 v*ww.its □ Driver Manager ( java.sql.DriverManager ) ■裝載驅(qū)動程序,管理應(yīng)用程序與驅(qū)動程序之間的連接。 □ Driver (由驅(qū)動程序開發(fā)商提供) ■將應(yīng)用程序的API請求轉(zhuǎn)換為特定的數(shù)據(jù)庫請求。 □ Connection ( java.sql.Connection ) ■將應(yīng)用程序連接到特定的數(shù)據(jù)庫 □ Statement ( java.sql.Statement ) -在一個給
6、走的連接中”用于執(zhí)行一個靜態(tài)的數(shù)據(jù)庫SQL語句。 □ ResultSet ( java.sql.ResultSet ) ■ SQL語句中心完后,返回的數(shù)據(jù)結(jié)果集(包括行、列)。 口 Metadata ( java.sql.DatabaseMetadata; java.sql. ResultSetMetadata ) -關(guān)于查詢結(jié)果集、數(shù)據(jù)庫和驅(qū)動程序的元數(shù)據(jù)信息。 v*ww.its Import the necessaiy classes Load the JDBC driver Identify the database source Allocate a "Co
7、nnection" object (create) Allocate a "Statement" object (create) Execute a query using the "Statement" object Retrieve data from the returned “ResultSet" object Close the “Resultset" object Close the "Statemenf, object Close the "Connection^ object JDB
8、C 基礎(chǔ):基本工作步驟 Link to DB Result (tuples) Result (tuples) 11 JDBC 驅(qū)動程序 v*ww.its JDBC支持四種類型的驅(qū)動程序: JDBC-ODBC Bridge, plus ODBC driver (Type 1) ■ Simplest ■ JDBC methods -> Translate JDBC methods to ODBC methods -> ODBC to native methods -> Native methods API Nati
9、ve-API, partly Java driver (Type 2) ■ JDBC methods -> Map JDBC methods to native methods (calls to vendor libraiy)?> Native methods API (vendor libraiy) JDBC-net, pure Java driver (Type 3) ■ JDBC methods -> Translate to Native API methods tlu*ough TCP/IP network -> Native API methods
10、 Native-protocol, pure Java driver (Type 4) ■ Java methods ?> Native methods in Java JDBC-ODBC Bridge, plus ODBC driver (Type 1) ■由Sim的Java2 JDK提供 (sun.jdbc.odbc.JdbcOdbcDriver) ■通過ODBC驅(qū)動程序來獲得對 數(shù)據(jù)庫的JDBC訪問 必須先安裝ODBC驅(qū)動程序和 配置ODBC數(shù)據(jù)源。 -僅當(dāng)特定的數(shù)據(jù)庫系統(tǒng)沒有相 應(yīng)的JDBC驅(qū)動程序時使用。 v*ww.its Native-API, partl
11、y Java driver (Type 2) ■ Native-API driver 將JDBC 命令轉(zhuǎn)換為特定數(shù)據(jù)庫系 統(tǒng)的本地庫方法。 ■與Type 1相類似,必須先安 裝特定數(shù)據(jù)庫的庫方法( 二進制代碼/非Java ) 0 JDBC-net, pure Java driver (Type 3) ■將JDBC命令轉(zhuǎn)換為與數(shù)據(jù)庫系統(tǒng) 無關(guān)的網(wǎng)絡(luò)協(xié)議,并發(fā)送給一個中 間件服務(wù)器。 ■中間件服務(wù)器再將數(shù)據(jù)庫系統(tǒng)無關(guān) 的網(wǎng)絡(luò)協(xié)議轉(zhuǎn)換為特定數(shù)據(jù)庫系統(tǒng) 的協(xié)議,并發(fā)送給數(shù)據(jù)庫系統(tǒng)。 Middleware Space JDBC Driver Proprietary Protocol
12、Database 從數(shù)據(jù)庫系統(tǒng)獲得的結(jié)果先發(fā)送給 中間件服務(wù)器,并進而返回給應(yīng)用 程序。 15 JDBC —區(qū)動程摩 Native-protocol, pure Java driver (Type 4) ■純Java的驅(qū)動程序z直接與 特定的數(shù)據(jù)庫系統(tǒng)通信。 ■直接將JDBC命令轉(zhuǎn)換為數(shù) 據(jù)庫系統(tǒng)的本地協(xié)議。 優(yōu)點:沒有中間的轉(zhuǎn)換或者 是中間件。 ■通常用于提高數(shù)據(jù)庫訪問的 性能。 JDBC ——編程 任何一個JDBC應(yīng)用程序,都需要以下四個步驟: 加載JDBC驅(qū)動程序 建立與數(shù)據(jù)庫的連接 進行數(shù)據(jù)庫操作 關(guān)閉相關(guān)連接 17 Stepl——裝載驅(qū)
13、動程序 ?裝載驅(qū)動程序 -應(yīng)用Class類的forName()方法注冊JDBC-ODBC橋驅(qū)動程序 Class ? forName(nsun.jdbc ? odbc ? JdbcOdbcDrivern); 注冊O(shè)eule數(shù)據(jù)庫廠商提供的JDBC驅(qū)動程序 Class ? forName ("oracle? jdbc? driver? OracleDrivern); A建立橋接器時可能發(fā)生異常,需要捕獲這個異常 Try { class ? forName("sun ? jdbc ? odbc ? JdbcOdbcDriver"); 16 }
14、Catch(ClassNotFoundEXception e) {} 仃 Step2建立與數(shù)據(jù)庫的連接 利用DriverManager類的靜態(tài)方法getCoimection()來獲得與 特定數(shù)據(jù)庫的連接實例(Connection實例)o / Connection conn = DriverManager.getConnection(url); / Connection conn = DriverManager.getConnection(url, user, pass); 這三個參數(shù)都是SWng類型的,使用不同的驅(qū)動程序與不 同的數(shù)據(jù)庫建立連接時小H的內(nèi)容是不同的,但其
15、格式是一 致的,都包括三個部分: jdbctdriverTypetdataSource 對于JDBGODBC Bridge f driverType為odbc, dataSource^] 為ODBC數(shù)據(jù)源:〃jdbc:odbc:myDSN= 對于其他類型的驅(qū)動程序,根據(jù)數(shù)據(jù)庫系統(tǒng)的不同 driverType^UdataSource有不同的格式和內(nèi)容。 Step3進行數(shù)據(jù)庫操作 每執(zhí)行—條SQL語句,都需要禾I」用Connetcion實例的 createStatement()方法來創(chuàng)建一個Statement實例。Statement的 常用方法包括: 執(zhí)行SQL INSERT, U
16、PDATE 或 DELETE 等語句 ■ int executeUpdate(String sql) 執(zhí)行SQL SELECT語句 ■ ResultSet executeQuery(String sql) 執(zhí)行一個可能返回多個結(jié)果的SQL語句 boolean execute(Stringsql)(與其他方法結(jié)合起來來獲得結(jié)果) Statement中還有其他的方法來執(zhí)行SQL語句。 仃 Step4 :進行數(shù)據(jù)庫操作 v*ww.its 通過ResultSet來獲得查詢結(jié)果: ResultSef實例最初定位在結(jié)果集的第一行(記錄) ResultSet提供了一些在結(jié)果集
17、中定位的方法,如next()等。 ResultSef提供了一些方法來獲得當(dāng)前行中的不同字段的 值,getXXX()0 ResultSet中還提供了有關(guān)方法,來修改結(jié)果集,并提交到數(shù) 據(jù)庫中去。 23 ResultSet^ 用 getXXX 方法 返冋值類型 方法名稱■ boolea n getBoolea n() byte getByte() byte[] getBytes() java.sql. Date getDate() double getDouble() float getFloat() int getlnt() long getL
18、ong() Object getObject() short getShort() java」an g.Stri ng getString() java.sql.Time getTime() 參數(shù): int collndex 或 String colName 25 Step4 :進行數(shù)據(jù)庫操作 v*ww.its 通過ResultSetMetadata來獲得查詢結(jié)果的元數(shù)據(jù)信息: Re suits ef提供了 一個方法getMeta data ()來獲得結(jié)果集的
19、 元數(shù)據(jù)信息,它返回的是一個ResultSefMe怕data實例。 ■通jSResultSetMetadata實例z就可以獲得結(jié)果集中字段 的詳細信息z如字段總數(shù),每個字段的名稱、類型等。 ? getColumnCount() // # of columns in the row ? getColumnName( z) // returns column name ? getColumnTjqpe (/) // returns column data type ? getColumnLabel (z) //suggested label for a column when prin
20、t ? getTableName() //returns the name of the table 確定了字段類型,獲取字段數(shù)據(jù)時,就可以明確如何使 用 ResultSet 中的 getXXX ()方法了。 27 通過DatabaseMetadata來獲得數(shù)據(jù)庫的元數(shù)據(jù)信息: Connection提供了 一個方法getMetadata(侏獲得數(shù)據(jù)庫的 元數(shù)據(jù)信息,它返回的是一個DafabaseMetadata實例。 通過DatabaseMetadata實例,就可以獲得數(shù)據(jù)庫的各種 信息,如數(shù)據(jù)庫廠商信息、版本信息、數(shù)據(jù)表數(shù)目、每 個數(shù)據(jù)表名稱等。 ? getDataba
21、seProductNameO ? getDatabaseProductVersion() ? getDriverName() ? getTablesQ JDBC ——示例 ?【例1】使用Access數(shù)據(jù)庫創(chuàng)建student數(shù)據(jù)庫及表。 -創(chuàng)建數(shù)據(jù)庫 -創(chuàng)建Access數(shù)據(jù)庫文件,數(shù)據(jù)庫文件名為student.mdbo _創(chuàng)建表 -輸入數(shù)據(jù) ■配置ODBC數(shù)據(jù)源 1) 打開控制面板,選擇ODBCI頁 2) 選擇Add 3) 選桂Microsoft Access Driver.(若沒有此I頁,應(yīng)先安裝ODBC驅(qū)動 程席) 4) 栓Data Source Name—項
22、中填入數(shù)據(jù)源名,以后對此數(shù)據(jù)源的引 用要通過數(shù)據(jù)源名來實現(xiàn)?最后按ok完成操作. 29 v*ww.its [例2】JDBC插入.修改和刪除數(shù)據(jù)庫數(shù)據(jù) 提示: _省如據(jù)庫建立連接 _ 所有JDBC程序的蔓二驢是與數(shù)據(jù)庫建立連接?用戶將得到_個 java.sql.connection 類的對象。 - Connection coni = DriverManager.getConnection (njdbc:odbc:n+datasource); - 加載驅(qū)動程序 一 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver&quo
23、t;); - Statement對象調(diào)用方法: 一 public int executellpdate(String sqIStatement) -添加 一 executellpdate(uinsert into tablel values(m','33',60)”); -刪除 一 executellpdate(udelete from tablel set 學(xué)號='88' -更新 -executeUpdate(uupdate tablel set 數(shù)學(xué)=88 where 姓名王名,”); # www.irs.tzc edu.
24、crvdefau一一t.hrm m^ffiMlw口fift肅 MaJDBC幕幕|帖常麗霽輜符專蘿1=|9 java.sqLconneaion^ss^o connection con」H DriverManager.gefconnection (二jdbaodbc=+das-sou「cer Qass.forName (二 sumjdbc.odbc.JdbcodbcDnven:); ss-temensgB^a才m- pub-ic inf execuCDupdate(smng sq-sartement) 暫tJ execuoupdao(二 nsert ino5rb-e1 va-ues(?111<33「60r); execuoupdaoude-eofroms-b-e—XS2.唯如兒 88!)八 1 execuoupdaCDppdaosrb-el S2.^4JIH88 wheresMH.HHM、=「
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案