




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Modal 10: Java數(shù)據(jù)庫(kù)編程,唐好選 Email:,主要內(nèi)容,ODBC介紹 JDBC介紹 JDBC例程 JDBC結(jié)構(gòu)(包括JDBC API和JDBC驅(qū)動(dòng)) Java JDBC應(yīng)用框架 Java JDBC基本類介紹 Java JDBC異常 事務(wù)處理,ODBC介紹,ODBC (Open DataBase Connectivity) ODBC是用C語(yǔ)言實(shí)現(xiàn)的一種標(biāo)準(zhǔn)應(yīng)用程序數(shù)據(jù)庫(kù)接口,包括以下幾個(gè)方面的內(nèi)容 應(yīng)用程序接口:統(tǒng)一的SQL編程接口 驅(qū)動(dòng)器管理器:為應(yīng)用程序裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)器 數(shù)據(jù)庫(kù)驅(qū)動(dòng)器:實(shí)現(xiàn)ODBC的函數(shù)調(diào)用,提供對(duì)特定數(shù)據(jù)源的SQL請(qǐng)求 數(shù)據(jù)源:由DBMS、操作系統(tǒng)和相關(guān)的網(wǎng)
2、絡(luò)平臺(tái)組成,JDBC介紹,JDBC(Java DataBase Connectivity) JDBC 是一種用于執(zhí)行SQL語(yǔ)句的Java API ,可以按統(tǒng)一的方式訪問(wèn)數(shù)據(jù)庫(kù) JDBC程序包:java.sql JDBC提供實(shí)現(xiàn): 訪問(wèn)數(shù)據(jù)庫(kù)與平臺(tái)無(wú)關(guān) 對(duì)數(shù)據(jù)庫(kù)使用者而言是透明的 對(duì)數(shù)據(jù)庫(kù)本身而言也是透明的 幾乎每個(gè)數(shù)據(jù)庫(kù)供應(yīng)商都具有JDBC驅(qū)動(dòng),JDBC介紹,JDBC可以使java應(yīng)用(APP和Applet)同大量關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)之間建立起獨(dú)立于數(shù)據(jù)庫(kù)的連接(例如Oracle/Sybase/SQL Server等) JDBC主要實(shí)現(xiàn)以下功能 連接到數(shù)據(jù)庫(kù) 向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句 處理數(shù)據(jù)庫(kù)返回的
3、結(jié)果 執(zhí)行更新/插入和刪除操作 執(zhí)行存儲(chǔ)過(guò)程,import java.sql.* try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);,Step1:連接到數(shù)據(jù)庫(kù),Statement statement = connection.createStatement(); String sql = “SELECT * FROM student”; ResultSet resultSet = stat
4、ement.executeQuery(sql);,Step2:執(zhí)行SQL語(yǔ)句,查詢數(shù)據(jù)庫(kù),JDBC例程,while( resultSet.next() ) name = resultSet.getString(1); phone = resultSet.getString(2); System.out.println( name + “,” + phone ); ,Step3:產(chǎn)生查詢結(jié)果,resultSet.close(); statement.close(); connection.close(); catch(Exception e) ,Step4:關(guān)閉連接,JDBC例程,步驟1: 得到
5、正確的 driver 并創(chuàng)建一個(gè)連接 Driver 是動(dòng)態(tài)裝入的 The Connection URL 是與數(shù)據(jù)庫(kù)有關(guān)的,并指向服務(wù)器,Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);,JDBC例程,步驟 2 : 建立一個(gè) statement; 向字符串中寫(xiě)入 SQL 命令,執(zhí)行它 SQL 命令會(huì)傳送到數(shù)據(jù)庫(kù) 會(huì)返回一個(gè)結(jié)果集對(duì)象(ResultSetObject),該對(duì)象包含查詢后的結(jié)果,Sta
6、tement statement = connection.createStatement(); String sql = “SELECT * FROM student”; ResultSet resultSet = statement.executeQuery(sql);,JDBC例程,步驟3 : 分析結(jié)果 get()方法得到每種數(shù)據(jù)類型的數(shù)據(jù) (getString(col), getDate(col), ) 更改數(shù)據(jù)的方法 (updateString(col, val), ) scrollable 結(jié)果集可以定位具體行 (first(), last(), previous(), next(
7、), absolute(int), ),while( resultSet.next() ) name = resultSet.getString(1); phone = resultSet.getString(2); System.out.println( name + “,” + phone );,JDBC例程,步驟 4 : 操作完成后要關(guān)閉 關(guān)閉順序很重要: 1. ResultSet 2. Statement 3. Connection,resultSet.close(); statement.close(); connection.close();,JDBC例程,JDBC結(jié)構(gòu),JDBC結(jié)
8、構(gòu)由兩個(gè)層次組成 JDBC API支持Java應(yīng)用到JDBC驅(qū)動(dòng)管理器的通信 JDBC驅(qū)動(dòng)API支持JDBC驅(qū)動(dòng)管理器到ODBC驅(qū)動(dòng)的通信 JDBC API同時(shí)支持?jǐn)?shù)據(jù)庫(kù)訪問(wèn)的兩層和三層模型,JDBC結(jié)構(gòu),在兩層數(shù)據(jù)庫(kù)訪問(wèn)模型中,應(yīng)用程序直接同數(shù)據(jù)庫(kù)進(jìn)行通信,兩層模型需要JDBC的驅(qū)動(dòng),由JDBC驅(qū)動(dòng)把SQL語(yǔ)句直接傳遞給數(shù)據(jù)庫(kù),并將結(jié)果發(fā)送回應(yīng)用程序,JDBC結(jié)構(gòu),在三層的數(shù)據(jù)庫(kù)訪問(wèn)模型中,JDBC驅(qū)動(dòng)把用戶命令發(fā)送給一個(gè)中間層應(yīng)用服務(wù),然后由它把命令發(fā)送給數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)處理這些命令,把結(jié)果發(fā)送回中間層,由中間層把結(jié)果發(fā)送回應(yīng)用程序,JDBC結(jié)構(gòu),對(duì)于應(yīng)用程序開(kāi)發(fā)人員, JDBC API允許
9、如下操作 連接到數(shù)據(jù)源 發(fā)送SQL語(yǔ)句 通過(guò)瀏覽/檢查和編輯數(shù)據(jù)的方法來(lái)處理結(jié)果 訪問(wèn)數(shù)據(jù)庫(kù)的元數(shù)據(jù)和查詢結(jié)果,JDBC驅(qū)動(dòng),所有的Java程序與數(shù)據(jù)庫(kù)創(chuàng)建連接過(guò)程的第一步是在JVM中注冊(cè)JDBC驅(qū)動(dòng) 靜態(tài)注冊(cè) DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver(); 動(dòng)態(tài)注冊(cè) Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 一旦JDBC驅(qū)動(dòng)程序用DriverManager注冊(cè)了,就可用于建立到數(shù)據(jù)庫(kù)的連接,JDBC驅(qū)動(dòng),JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)具有四種類型 JDBC-ODBC橋:J
10、DBC先連接到ODBC,ODBC再連接到數(shù)據(jù)庫(kù),把JDBC的方法轉(zhuǎn)換為ODBC的功能 部分java驅(qū)動(dòng):直接連接到供應(yīng)商客戶庫(kù)中 中間件驅(qū)動(dòng):由JDBC連接到中間件,中間件再連接到數(shù)據(jù)庫(kù)上 純java驅(qū)動(dòng):直接把JDBC的驅(qū)動(dòng)轉(zhuǎn)化為DBMS使用的網(wǎng)絡(luò)協(xié)議,允許從客戶機(jī)上直接調(diào)用DBMS服務(wù)器,是一種“瘦”驅(qū)動(dòng) 類型3和類型4都可以用在有關(guān)因特網(wǎng)的應(yīng)用程序中,類型 1:JDBC-ODBC驅(qū)動(dòng),運(yùn)行在 Windows上 需要在客戶端安裝ODBC driver,類型 1:JDBC-ODBC驅(qū)動(dòng),import java.sql.* try Class.forName(“sun.jdbc.odbc.Jd
11、bcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);,類型 2:部分java驅(qū)動(dòng)(本地API驅(qū)動(dòng)),客戶端安裝driver driver將 JDBC請(qǐng)求轉(zhuǎn)成數(shù)據(jù)庫(kù)本地 API請(qǐng)求 每臺(tái)客戶機(jī)上加載數(shù)據(jù)庫(kù)庫(kù)文件 不能用在因特網(wǎng)上,import java.sql.* try Class.forName(“com.ibm.db2.jdbc.app.DB2Driver”); Connection connection = DriverManager.getConnec
12、tion(“jdbc:db2:Demo”,”a”,”a”);,類型 2:部分java驅(qū)動(dòng)(本地API驅(qū)動(dòng)),類型 3 :中間件驅(qū)動(dòng)(網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)),網(wǎng)絡(luò)服務(wù)器作用 負(fù)責(zé)管理職責(zé) 緩沖caching 池pooling,類型 3 :中間件驅(qū)動(dòng)(網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)),類型 4 :純java驅(qū)動(dòng)(本地協(xié)議驅(qū)動(dòng)),其實(shí)現(xiàn)不需要客戶端的任何配置!,import java.sql.* try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);conn = DriverManager.getConnection(jdbc:microsoft:sq
13、lserver: /TANGHX:1433;DatabaseName=teach,sa,); ,類型 4 :純java驅(qū)動(dòng)(本地協(xié)議驅(qū)動(dòng)),MySQL Class.forName(“org.gjt.mm.mysql.Driver”) DriverManage.getConnection(“jdbc.mysql:/Hostname:3306/DatabaseName”,sUsr,spwd) Oracle Class.forName(“oracle.jdbc.driver.OracleDriver”); DriverManager.getConnection(“jdbc:oracle:thin:1
14、521:DatabaseName”,sUsr,sPwd),JDBC URL,Sybase Class.forName(“com.sybase.jdbc2.jdbc.SybDriver”) DriverManage.getConnection(“jdbc.sybase:Tds:HostName:2638”,sUsr,spwd) SqlServer Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”); DriverManager.getConnection(“jdbc:microsoft:sqlserver:/HostName
15、:1433;DatabaseName=demo”,sUsr,sPwd) DB2 Class.forName(“.DB2Driver”); DriverManager.getConnection(“jdbc:db2:/HostName/DatabaseName”,sUsr,sPwd),JDBC URL,DriverManage類可維護(hù)驅(qū)動(dòng)實(shí)現(xiàn)的列表,最終向應(yīng)用程序提供一個(gè)匹配了JDBC URL的驅(qū)動(dòng)實(shí)現(xiàn) Driver類是JDBC驅(qū)動(dòng)的接口,任何特定的數(shù)據(jù)庫(kù)驅(qū)動(dòng)都必須實(shí)現(xiàn)該接口 Connection接口用來(lái)把一系列SQL語(yǔ)句發(fā)送給數(shù)據(jù)庫(kù),并管理其提交或中斷,具體包含如下步驟 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) 定義U
16、RL 建立連接,Java.sql核心類介紹,JDBC支持三種類型的語(yǔ)句 Statement:用來(lái)立即執(zhí)行SQL語(yǔ)句 PreparedStatement:用來(lái)執(zhí)行編譯后的SQL語(yǔ)句 CollableStatement:用來(lái)執(zhí)行存儲(chǔ)過(guò)程 Statement用來(lái)執(zhí)行靜態(tài)SQL語(yǔ)句,并獲得處理結(jié)果 可使用Connection對(duì)象中的createStatement()方法創(chuàng)建Statement對(duì)象 對(duì)于SELECT語(yǔ)句,使用的方法是executeQuery() 對(duì)于諸如UPDATE/DELETE/DDL等語(yǔ)句,使用的方法是executeUpdate(),Java.sql核心類介紹,PreparedSta
17、tement:用來(lái)執(zhí)行編譯后的SQL語(yǔ)句,Java.sql核心類介紹,PreparedStatement pstmt = con.prepareStatement(UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?); pstmt.setBigDecimal(1, 153833.00); pstmt.setInt(2, 110592); pstmt.executeUpdate();,CallableStatement:用來(lái)執(zhí)行存儲(chǔ)過(guò)程,Connection.prepareCall(call proc_test(?,?);,ResultSet接口封裝了代表數(shù)
18、據(jù)庫(kù)查詢返回?cái)?shù)據(jù)的對(duì)象 Statement接口的executeQuery()方法返回了ResultSet對(duì)象 獲得ResultSet對(duì)象的句柄之后,指針最初定位在第1行之前,使用ResultSet對(duì)象的next()方法可以循環(huán)遍歷數(shù)據(jù)庫(kù)返回全部數(shù)據(jù)行,Java.sql核心類介紹,DatabaseMetaData接口提供了描述數(shù)據(jù)庫(kù)全局信息的所有變量和方法,Java.sql核心類介紹,DatabaseMetaData dm = conn.getMetaData(); System.out.println(dm.getDatabaseProductName(); System.out.printl
19、n(dm.getDatabaseProductVersion(); System.out.println(dm.getDriverName(); System.out.println(dm.getDriverVersion(); System.out.println(dm.getMaxRowSize(); System.out.println(dm.getURL(); System.out.println(dm.getUserName();,JDBC異常類型,JDBC提供的異常類型包括: SQLException/SQLWarning/DataTruncation Java.sql程序包中大多
20、數(shù)方法都用SQLException指示異常,要求用try/catch程序塊處理異常,try catch(SQLException sqle) while(sqle!=null) System.err.print(“SQLException: “); System.println(sqle.toString(); sqle=sqle.getNextException(); ,事務(wù)處理,不進(jìn)行事務(wù)處理例: 1. Client A reads the record(a, b) 2. Client B reads the record(a, b) 3. Client A changes a for x and writes(x, b) 4. Client B chang
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼鐵是怎樣煉成的網(wǎng)絡(luò)閱讀推廣計(jì)劃
- 六年級(jí)道德與法治能力培養(yǎng)輔優(yōu)計(jì)劃
- 酒店管理項(xiàng)目部年度工作總結(jié)范文
- 人教版六年級(jí)數(shù)學(xué)下冊(cè)家長(zhǎng)參與計(jì)劃
- 大型活動(dòng)突發(fā)事件應(yīng)急預(yù)案和處理流程
- 跨境電商物流市場(chǎng)營(yíng)銷管理畢業(yè)論文范文
- 2024-2025學(xué)年牛津譯林版英語(yǔ)四年級(jí)教學(xué)方案計(jì)劃
- 水利工程測(cè)繪成果保密管理制度流程
- 一年級(jí)語(yǔ)文新教師實(shí)習(xí)計(jì)劃范文
- 新時(shí)代教師師德教育心得體會(huì)
- 恙蟲(chóng)病護(hù)理查房
- 腫瘤免疫治療及護(hù)理講課件
- 浙江2025年6月高二學(xué)考模擬-數(shù)學(xué)試題及答案
- 臺(tái)胞臺(tái)屬活動(dòng)方案
- 百師聯(lián)盟2023-2024學(xué)年高一年級(jí)下學(xué)期6月期末聯(lián)考考試卷 生物及答案
- 林業(yè)碳匯項(xiàng)目開(kāi)發(fā)流程與審核要點(diǎn)
- 2025年人教版七年級(jí)下冊(cè)生物期末檢測(cè)試卷及答案
- 廣東省中山市名校2025屆中考聯(lián)考生物試題含解析
- 手術(shù)室清潔消毒記錄表
- 免稅蔬菜主要品種目錄
- 建構(gòu)主義視域下大學(xué)生創(chuàng)業(yè)教育的創(chuàng)新理路探究
評(píng)論
0/150
提交評(píng)論