《Java數(shù)據(jù)庫連接》PPT課件.ppt_第1頁
《Java數(shù)據(jù)庫連接》PPT課件.ppt_第2頁
《Java數(shù)據(jù)庫連接》PPT課件.ppt_第3頁
《Java數(shù)據(jù)庫連接》PPT課件.ppt_第4頁
《Java數(shù)據(jù)庫連接》PPT課件.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Modal 10: Java數(shù)據(jù)庫編程,唐好選 Email:,主要內(nèi)容,ODBC介紹 JDBC介紹 JDBC例程 JDBC結(jié)構(gòu)(包括JDBC API和JDBC驅(qū)動) Java JDBC應(yīng)用框架 Java JDBC基本類介紹 Java JDBC異常 事務(wù)處理,ODBC介紹,ODBC (Open DataBase Connectivity) ODBC是用C語言實現(xiàn)的一種標準應(yīng)用程序數(shù)據(jù)庫接口,包括以下幾個方面的內(nèi)容 應(yīng)用程序接口:統(tǒng)一的SQL編程接口 驅(qū)動器管理器:為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動器 數(shù)據(jù)庫驅(qū)動器:實現(xiàn)ODBC的函數(shù)調(diào)用,提供對特定數(shù)據(jù)源的SQL請求 數(shù)據(jù)源:由DBMS、操作系統(tǒng)和相關(guān)的網(wǎng)

2、絡(luò)平臺組成,JDBC介紹,JDBC(Java DataBase Connectivity) JDBC 是一種用于執(zhí)行SQL語句的Java API ,可以按統(tǒng)一的方式訪問數(shù)據(jù)庫 JDBC程序包:java.sql JDBC提供實現(xiàn): 訪問數(shù)據(jù)庫與平臺無關(guān) 對數(shù)據(jù)庫使用者而言是透明的 對數(shù)據(jù)庫本身而言也是透明的 幾乎每個數(shù)據(jù)庫供應(yīng)商都具有JDBC驅(qū)動,JDBC介紹,JDBC可以使java應(yīng)用(APP和Applet)同大量關(guān)系數(shù)據(jù)庫系統(tǒng)之間建立起獨立于數(shù)據(jù)庫的連接(例如Oracle/Sybase/SQL Server等) JDBC主要實現(xiàn)以下功能 連接到數(shù)據(jù)庫 向數(shù)據(jù)庫發(fā)送SQL語句 處理數(shù)據(jù)庫返回的

3、結(jié)果 執(zhí)行更新/插入和刪除操作 執(zhí)行存儲過程,import java.sql.* try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);,Step1:連接到數(shù)據(jù)庫,Statement statement = connection.createStatement(); String sql = “SELECT * FROM student”; ResultSet resultSet = stat

4、ement.executeQuery(sql);,Step2:執(zhí)行SQL語句,查詢數(shù)據(jù)庫,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)建一個連接 Driver 是動態(tài)裝入的 The Connection URL 是與數(shù)據(jù)庫有關(guān)的,并指向服務(wù)器,Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);,JDBC例程,步驟 2 : 建立一個 statement; 向字符串中寫入 SQL 命令,執(zhí)行它 SQL 命令會傳送到數(shù)據(jù)庫 會返回一個結(jié)果集對象(ResultSetObject),該對象包含查詢后的結(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)由兩個層次組成 JDBC API支持Java應(yīng)用到JDBC驅(qū)動管理器的通信 JDBC驅(qū)動API支持JDBC驅(qū)動管理器到ODBC驅(qū)動的通信 JDBC API同時支持數(shù)據(jù)庫訪問的兩層和三層模型,JDBC結(jié)構(gòu),在兩層數(shù)據(jù)庫訪問模型中,應(yīng)用程序直接同數(shù)據(jù)庫進行通信,兩層模型需要JDBC的驅(qū)動,由JDBC驅(qū)動把SQL語句直接傳遞給數(shù)據(jù)庫,并將結(jié)果發(fā)送回應(yīng)用程序,JDBC結(jié)構(gòu),在三層的數(shù)據(jù)庫訪問模型中,JDBC驅(qū)動把用戶命令發(fā)送給一個中間層應(yīng)用服務(wù),然后由它把命令發(fā)送給數(shù)據(jù)庫,數(shù)據(jù)庫處理這些命令,把結(jié)果發(fā)送回中間層,由中間層把結(jié)果發(fā)送回應(yīng)用程序,JDBC結(jié)構(gòu),對于應(yīng)用程序開發(fā)人員, JDBC API允許

9、如下操作 連接到數(shù)據(jù)源 發(fā)送SQL語句 通過瀏覽/檢查和編輯數(shù)據(jù)的方法來處理結(jié)果 訪問數(shù)據(jù)庫的元數(shù)據(jù)和查詢結(jié)果,JDBC驅(qū)動,所有的Java程序與數(shù)據(jù)庫創(chuàng)建連接過程的第一步是在JVM中注冊JDBC驅(qū)動 靜態(tài)注冊 DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver(); 動態(tài)注冊 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 一旦JDBC驅(qū)動程序用DriverManager注冊了,就可用于建立到數(shù)據(jù)庫的連接,JDBC驅(qū)動,JDBC數(shù)據(jù)庫驅(qū)動具有四種類型 JDBC-ODBC橋:J

10、DBC先連接到ODBC,ODBC再連接到數(shù)據(jù)庫,把JDBC的方法轉(zhuǎn)換為ODBC的功能 部分java驅(qū)動:直接連接到供應(yīng)商客戶庫中 中間件驅(qū)動:由JDBC連接到中間件,中間件再連接到數(shù)據(jù)庫上 純java驅(qū)動:直接把JDBC的驅(qū)動轉(zhuǎn)化為DBMS使用的網(wǎng)絡(luò)協(xié)議,允許從客戶機上直接調(diào)用DBMS服務(wù)器,是一種“瘦”驅(qū)動 類型3和類型4都可以用在有關(guān)因特網(wǎng)的應(yīng)用程序中,類型 1:JDBC-ODBC驅(qū)動,運行在 Windows上 需要在客戶端安裝ODBC driver,類型 1:JDBC-ODBC驅(qū)動,import java.sql.* try Class.forName(“sun.jdbc.odbc.Jd

11、bcOdbcDriver”); Connection connection = DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);,類型 2:部分java驅(qū)動(本地API驅(qū)動),客戶端安裝driver driver將 JDBC請求轉(zhuǎn)成數(shù)據(jù)庫本地 API請求 每臺客戶機上加載數(shù)據(jù)庫庫文件 不能用在因特網(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ū)動(本地API驅(qū)動),類型 3 :中間件驅(qū)動(網(wǎng)絡(luò)協(xié)議驅(qū)動),網(wǎng)絡(luò)服務(wù)器作用 負責管理職責 緩沖caching 池pooling,類型 3 :中間件驅(qū)動(網(wǎng)絡(luò)協(xié)議驅(qū)動),類型 4 :純java驅(qū)動(本地協(xié)議驅(qū)動),其實現(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ū)動(本地協(xié)議驅(qū)動),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類可維護驅(qū)動實現(xiàn)的列表,最終向應(yīng)用程序提供一個匹配了JDBC URL的驅(qū)動實現(xiàn) Driver類是JDBC驅(qū)動的接口,任何特定的數(shù)據(jù)庫驅(qū)動都必須實現(xiàn)該接口 Connection接口用來把一系列SQL語句發(fā)送給數(shù)據(jù)庫,并管理其提交或中斷,具體包含如下步驟 加載數(shù)據(jù)庫驅(qū)動 定義U

16、RL 建立連接,Java.sql核心類介紹,JDBC支持三種類型的語句 Statement:用來立即執(zhí)行SQL語句 PreparedStatement:用來執(zhí)行編譯后的SQL語句 CollableStatement:用來執(zhí)行存儲過程 Statement用來執(zhí)行靜態(tài)SQL語句,并獲得處理結(jié)果 可使用Connection對象中的createStatement()方法創(chuàng)建Statement對象 對于SELECT語句,使用的方法是executeQuery() 對于諸如UPDATE/DELETE/DDL等語句,使用的方法是executeUpdate(),Java.sql核心類介紹,PreparedSta

17、tement:用來執(zhí)行編譯后的SQL語句,Java.sql核心類介紹,PreparedStatement pstmt = con.prepareStatement(UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?); pstmt.setBigDecimal(1, 153833.00); pstmt.setInt(2, 110592); pstmt.executeUpdate();,CallableStatement:用來執(zhí)行存儲過程,Connection.prepareCall(call proc_test(?,?);,ResultSet接口封裝了代表數(shù)

18、據(jù)庫查詢返回數(shù)據(jù)的對象 Statement接口的executeQuery()方法返回了ResultSet對象 獲得ResultSet對象的句柄之后,指針最初定位在第1行之前,使用ResultSet對象的next()方法可以循環(huán)遍歷數(shù)據(jù)庫返回全部數(shù)據(jù)行,Java.sql核心類介紹,DatabaseMetaData接口提供了描述數(shù)據(jù)庫全局信息的所有變量和方法,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ù)處理,不進行事務(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論