資源描述:
《利用JDBC進(jìn)行Oracle訪問(wèn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、課程目標(biāo)掌握基本的數(shù)據(jù)庫(kù)配置和管理熟練掌握SQL命令和SQL函數(shù)理解Oracle數(shù)據(jù)庫(kù)體系結(jié)構(gòu)使用Oracle的各種數(shù)據(jù)庫(kù)對(duì)象使用PL/SQL編寫(xiě)存儲(chǔ)過(guò)程使用PL/SQL編寫(xiě)觸發(fā)器掌握基本的Oracle數(shù)據(jù)庫(kù)管理2第十一章利用JDBC進(jìn)行Oracle訪問(wèn)目標(biāo)4概述JDBC(JavaDatabaseConnectivity)對(duì)ODBCAPI面向?qū)ο蟮姆庋b和重新設(shè)計(jì),使它易于學(xué)習(xí)和使用,而且能夠編寫(xiě)不依賴(lài)廠商的代碼,用以查詢(xún)和操縱數(shù)據(jù)庫(kù)。與所有JavaAPI一樣,它是面向?qū)ο蟮?,但并不是很高?jí)別的對(duì)象集.?JDBC可以訪問(wèn)包
2、括Oracle在內(nèi)的各種不同數(shù)據(jù)庫(kù),但Oracle數(shù)據(jù)庫(kù)包含許多獨(dú)特的特性,只能通過(guò)使用標(biāo)準(zhǔn)JDBC的Oracle擴(kuò)展來(lái)使用。Oracle擴(kuò)展可盡可能的發(fā)揮JDBC能力。5OracleJDBC驅(qū)動(dòng)程序1.Thin驅(qū)動(dòng)程序2.OCI驅(qū)動(dòng)程序3.服務(wù)器端內(nèi)部驅(qū)動(dòng)程序4.服務(wù)器端Thin驅(qū)動(dòng)程序6使用OracleJDBC導(dǎo)入JDBC包importjava.sql.*;7注冊(cè)JDBC驅(qū)動(dòng)程序有兩種注冊(cè)O(shè)racleJDBC驅(qū)動(dòng)程序的方法。第一種使用:Class.forName(“oracle.jdbc.OracleDriver”)
3、;第二種方法使用DriverManager。DriverManager類(lèi)是JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間。它跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。另外,DriverManager類(lèi)也處理諸如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。DriverManager.registerDriver(neworacle.jdbc.OracleDriver());8打開(kāi)數(shù)據(jù)流DriverManager.getConnection(URL,username,password);JDBCURL的標(biāo)準(zhǔn)
4、語(yǔ)法如下所示。它由三部分組成,各部分間用冒號(hào)分隔:jdbc:<子協(xié)議>:<子名稱(chēng)>JDBCURL的三個(gè)部分可分解如下:jdbc─協(xié)議。JDBCURL中的協(xié)議總是jdbc。子協(xié)議即將使用的驅(qū)動(dòng)程序,子名稱(chēng)是oracle數(shù)據(jù)庫(kù)服務(wù)名。Username程序連接數(shù)據(jù)庫(kù)時(shí)使用的數(shù)據(jù)庫(kù)用戶名。Password用戶名口令。9執(zhí)行sql語(yǔ)句1、創(chuàng)建Statement對(duì)象Statementstmt=con.createStatement();2、使用Statement對(duì)象執(zhí)行語(yǔ)句ResultSetrs=stmt.executeQuery(
5、"SELECTa,b,cFROMTable2");3、關(guān)閉Statement對(duì)象stmt.close();獲得查詢(xún)結(jié)果集ResultSetrs=stmt.executeQuery(“select語(yǔ)句”);while(rs.netxt()){數(shù)據(jù)類(lèi)型variable_name=rs.get××(字段腳標(biāo)或字段名);}關(guān)閉數(shù)據(jù)流關(guān)閉數(shù)據(jù)流連接是采用Connection對(duì)象的close方法。即時(shí)關(guān)閉數(shù)據(jù)流可以減少內(nèi)存占用。語(yǔ)句如下:con.close();12在JDBC中調(diào)用存儲(chǔ)過(guò)程CallableStatement對(duì)象為所有
6、的DBMS提供了一種以標(biāo)準(zhǔn)形式調(diào)用存儲(chǔ)過(guò)程的方法。有兩種調(diào)用形式:一種形式帶結(jié)果參數(shù),另一種形式不帶結(jié)果參數(shù)。在JDBC中調(diào)用存儲(chǔ)過(guò)程的語(yǔ)法如下所示。注意,方括號(hào)表示其間的內(nèi)容是可選項(xiàng);方括號(hào)本身并非語(yǔ)法的組成部份。{call過(guò)程名[(?,?,...)]}返回結(jié)果參數(shù)的存儲(chǔ)過(guò)程的語(yǔ)法為:{?=call過(guò)程名[(?,?,...)]}不帶參數(shù)的存儲(chǔ)過(guò)程的語(yǔ)法類(lèi)似:{call過(guò)程名}創(chuàng)建CallableStatement對(duì)象CallableStatement象是用Connection方法prepareCall創(chuàng)建的。下例創(chuàng)建C
7、allableStatement的實(shí)例,其中含有對(duì)存儲(chǔ)過(guò)程getEMPData調(diào)用。該過(guò)程有兩個(gè)變量,但不含結(jié)果參數(shù):CallableStatementcstmt=con.prepareCall("{callgetEMPData(?,?)}");其中?占位符為IN、OUT還是INOUT參數(shù),取決于存儲(chǔ)過(guò)程getEMPData。14IN和OUT參數(shù)將IN參數(shù)傳給CallableStatement對(duì)象是通過(guò)setXXX方法完成的。所傳入?yún)?shù)的類(lèi)型決定了所用的setXXX方法(例如,用setFloat來(lái)傳入float值等)。如
8、果存儲(chǔ)過(guò)程返回OUT參數(shù),則在執(zhí)行CallableStatement對(duì)象以前先注冊(cè)每個(gè)OUT參數(shù)的JDBC類(lèi)型,使用registerOutParameter方法來(lái)注冊(cè)。語(yǔ)句執(zhí)行完后,CallableStatement的getXXX方法將取回參數(shù)值。registerOutParameter使用的是JDBC類(lèi)型(因此它與