《Oracle數(shù)據(jù)庫(kù)應(yīng)用教程》課件第11章_第1頁(yè)
《Oracle數(shù)據(jù)庫(kù)應(yīng)用教程》課件第11章_第2頁(yè)
《Oracle數(shù)據(jù)庫(kù)應(yīng)用教程》課件第11章_第3頁(yè)
《Oracle數(shù)據(jù)庫(kù)應(yīng)用教程》課件第11章_第4頁(yè)
《Oracle數(shù)據(jù)庫(kù)應(yīng)用教程》課件第11章_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第11章

利用JDBC進(jìn)行Oracle訪問(wèn)

11.1概述

11.2OracleJDBC驅(qū)動(dòng)程序

11.3OracleJDBC的使用

11.4實(shí)例

11.5小結(jié)

習(xí)題十一

上機(jī)實(shí)驗(yàn)十一

11.1概

對(duì)ODBCAPI面向?qū)ο蟮姆庋b和重新設(shè)計(jì)使JDBC(JavaDataBaceConnectivity)易于學(xué)習(xí)和使用,而且利用JDBC能夠編寫(xiě)不依賴于廠商的代碼,用以查詢和操縱數(shù)據(jù)庫(kù)。與所有JavaAPI一樣,它是面向?qū)ο蟮?,但并不是很高?jí)別的對(duì)象集。JDBC可以訪問(wèn)包括Oracle在內(nèi)的各種不同數(shù)據(jù)庫(kù),但Oracle數(shù)據(jù)庫(kù)包含許多獨(dú)特的性質(zhì),只能通過(guò)使用標(biāo)準(zhǔn)JDBC的Oracle擴(kuò)展來(lái)使用。Oracle擴(kuò)展可盡可能地發(fā)揮JDBC的能力。

11.2OracleJDBC驅(qū)動(dòng)程序

OracleJDBC驅(qū)動(dòng)程序使Java程序中的JDBC語(yǔ)句可以訪問(wèn)Oracle數(shù)據(jù)庫(kù)。OracleJDBC驅(qū)動(dòng)程序有以下四種。

1.Thin驅(qū)動(dòng)程序

Thin驅(qū)動(dòng)程序?qū)Y源消耗最小,完全由Java編寫(xiě)。它可以在獨(dú)立的Java應(yīng)用程序(包括JavaApplet)中使用,并且可以訪問(wèn)所有版本的Oracle數(shù)據(jù)庫(kù)。

2.OCI驅(qū)動(dòng)程序

OCI驅(qū)動(dòng)程序比Thin驅(qū)動(dòng)程序占用資源多,但性能好一點(diǎn)。它適合于部署在中間層的軟件,如Web服務(wù)器。OCI驅(qū)動(dòng)程序是第二類驅(qū)動(dòng)程序,不完全是用Java編寫(xiě)的,還包含用C寫(xiě)的代碼。

3.服務(wù)器端內(nèi)部驅(qū)動(dòng)程序

服務(wù)器端內(nèi)部驅(qū)動(dòng)程序提供對(duì)數(shù)據(jù)庫(kù)的直接訪問(wèn),OracleJVM使用它與數(shù)據(jù)庫(kù)進(jìn)行通信。OracleJVM是與數(shù)據(jù)庫(kù)集成的虛擬機(jī),可以使用OracleJVM將Java類裝載進(jìn)數(shù)據(jù)庫(kù),然后公布和運(yùn)行這個(gè)類中包含的方法。

4.服務(wù)器端Thin驅(qū)動(dòng)程序

服務(wù)器端Thin驅(qū)動(dòng)程序也是由OracleJVM使用的,它提供對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)的訪問(wèn)。與Thin驅(qū)動(dòng)程序一樣,這種驅(qū)動(dòng)程序也完全使用Java編寫(xiě)。

11.3OracleJDBC的使用

11.3.1導(dǎo)入JDBC包

要能使用JDBC,必須將所需的JDBC包導(dǎo)入Java程序。

importjava.sql.*;11.3.2注冊(cè)JDBC驅(qū)動(dòng)程序

有兩種注冊(cè)O(shè)racleJDBC驅(qū)動(dòng)程序的方法。第一種使用Class.forName("oracle.jdbc.

OracleDriver");第二種方法使用DriverManager。DriverManager類是

JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間。它跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。另外,DriverManager類也處理諸如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。

DriverManager.registerDriver(neworacle.jdbc.OracleDriver());如果使用OracleJDBC驅(qū)動(dòng)程序,則需要導(dǎo)入oracle.jdbc.driver.OracleDriver類,然后注冊(cè)這個(gè)類的實(shí)例。

Importoracle.jdbc.driver.OracleDriver;

DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

11.3.3打開(kāi)數(shù)據(jù)流

加載

Driver類并在

DriverManager類中注冊(cè)后,即可與數(shù)據(jù)庫(kù)建立連接。

與數(shù)據(jù)庫(kù)建立連接的標(biāo)準(zhǔn)方法是調(diào)用DriverManager.getConnection。該方法接受含有某個(gè)

URL的字符串。DriverManager類(即所謂的

JDBC管理層)將嘗試找到可與那個(gè)

URL所代表的數(shù)據(jù)庫(kù)進(jìn)行連接的驅(qū)動(dòng)程序。DriverManager類存有已注冊(cè)的

Driver類的清單。當(dāng)調(diào)用方法

getConnection時(shí),它將檢查清單中的每個(gè)驅(qū)動(dòng)程序,直到找到可與URL中指定的數(shù)據(jù)庫(kù)進(jìn)行連接的驅(qū)動(dòng)程序?yàn)橹埂river的方法connect使用這個(gè)

URL來(lái)建立實(shí)際的連接。

DriverManager.getConnection(URL,username,password);

JDBCURL提供了一種標(biāo)識(shí)數(shù)據(jù)庫(kù)的方法,可以使相應(yīng)的驅(qū)動(dòng)程序識(shí)別該數(shù)據(jù)庫(kù)并與之建立連接。實(shí)際上,驅(qū)動(dòng)程序編程員決定用什么JDBCURL來(lái)標(biāo)識(shí)特定的驅(qū)動(dòng)程序。用戶不必關(guān)心如何形成JDBCURL,他們只需使用與所用驅(qū)動(dòng)程序一起提供的URL即可。JDBC的作用是提供某些約定,驅(qū)動(dòng)程序編程員在構(gòu)造JDBCURL時(shí)應(yīng)該遵循這些約定。JDBCURL的標(biāo)準(zhǔn)語(yǔ)法如下所示,它由三部分組成,各部分間用冒號(hào)分隔。

Jdbc:<子協(xié)議>:<子名稱>

JDBCURL的三個(gè)部分可分解如下:

jdbc為協(xié)議,JDBCURL中的協(xié)議總是jdbc;子協(xié)議為即將使用的驅(qū)動(dòng)程序;子名稱是Oracle數(shù)據(jù)庫(kù)服務(wù)名。

username表示程序連接數(shù)據(jù)庫(kù)時(shí)使用的數(shù)據(jù)庫(kù)用戶名。

password表示用戶名口令。

以下例子使用getConnection()方法連接數(shù)據(jù)庫(kù)。

Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");

這個(gè)例子使用的是OracleJDBCThin驅(qū)動(dòng)程序。

11.3.4執(zhí)行SQL語(yǔ)句

Statement對(duì)象用于將

SQL語(yǔ)句發(fā)送給數(shù)據(jù)庫(kù)。Statement對(duì)象有三種:Statement、PreparedStatement(從

Statement繼承而來(lái))和

CallableStatement(從

PreparedStatement繼承而來(lái)),它們是給定連接上執(zhí)行SQL語(yǔ)句的包容器,它們都專用于發(fā)送特定類型的SQL

語(yǔ)句。

Statement對(duì)象用于執(zhí)行不帶參數(shù)的簡(jiǎn)單

SQL語(yǔ)句;PreparedStatement對(duì)象用于執(zhí)行帶或不帶

IN參數(shù)的預(yù)編譯

SQL語(yǔ)句;CallableStatement對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫(kù)已存儲(chǔ)過(guò)程的調(diào)用。

1.創(chuàng)建

Statement對(duì)象

建立了到特定數(shù)據(jù)庫(kù)的連接之后,就可用該連接發(fā)送

SQL語(yǔ)句。Statement對(duì)象用

Connection的方法

createStatement創(chuàng)建,如下列代碼段所示:

Statementstmt=con.createStatement();

為了執(zhí)行

Statement對(duì)象,被發(fā)送到數(shù)據(jù)庫(kù)的

SQL語(yǔ)句將被作為參數(shù)提供給

Statement。

2.使用

Statement對(duì)象執(zhí)行語(yǔ)句

Statement接口提供了三種執(zhí)行

SQL語(yǔ)句的方法:executeQuery、executeUpdate和

execute。使用哪一種方法由

SQL語(yǔ)句所產(chǎn)生的內(nèi)容決定。方法

executeQuery用于產(chǎn)生單個(gè)結(jié)果集的語(yǔ)句,例如:

ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable2");方法executeUpdate用于執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句以及SQLDDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE語(yǔ)句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))。對(duì)于CREATETABLE或DROPTABLE等不操作行的語(yǔ)句,executeUpdate的返回值總為零。

intline=stmt.executeUpdate("insertintouserinfovalues('juliet','juliet')");

如果預(yù)先不知道要執(zhí)行的SQL語(yǔ)句類型,則可使用方法execute,用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語(yǔ)句。

3.關(guān)閉

Statement對(duì)象

Statement對(duì)象由

Java垃圾收集程序自動(dòng)關(guān)閉。作為一種好的編程風(fēng)格,應(yīng)在不需要

Statement對(duì)象時(shí)顯式地關(guān)閉它們。這將立即釋放

DBMS資源,有助于避免潛在的內(nèi)存問(wèn)題。語(yǔ)句如下:

stmt.close();11.3.5獲得查詢結(jié)果集

ResultSet包含符合

SQL語(yǔ)句中條件的所有行,并且通過(guò)一套

get方法(這些

get方法可以訪問(wèn)當(dāng)前行中的不同列)提供了對(duì)這些行中數(shù)據(jù)的訪問(wèn)。ResultSet.next方法用于移動(dòng)到

ResultSet中的下一行,使下一行成為當(dāng)前行。結(jié)果集一般是一個(gè)表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。

ResultSet維護(hù)指向其當(dāng)前數(shù)據(jù)行的光標(biāo)。每調(diào)用一次

next方法,光標(biāo)向下移動(dòng)一行。最初它位于第一行之前,因此第一次調(diào)用next時(shí)應(yīng)把光標(biāo)置于第一行上,使它成為當(dāng)前行。隨著每次調(diào)用next將導(dǎo)致光標(biāo)向下移動(dòng)一行,可按照從上至下的次序獲取ResultSet行。在

ResultSet對(duì)象或其父輩

Statement對(duì)象關(guān)閉之前,光標(biāo)一直保持有效。使用方法如下:

ResultSetrs=stmt.executeQuery("select語(yǔ)句");

while(xt())

{

數(shù)據(jù)類型

variable_name=rs.get××(字段腳標(biāo)或字段名);

}11.3.6關(guān)閉數(shù)據(jù)流

關(guān)閉數(shù)據(jù)流連接可采用Connection對(duì)象的close方法。即時(shí)關(guān)閉數(shù)據(jù)流可以減少內(nèi)存占用,關(guān)閉數(shù)據(jù)流的語(yǔ)句如下:

con.close();

11.3.7在JDBC中調(diào)用存儲(chǔ)過(guò)程

CallableStatement對(duì)象為所有的

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ǔ)法如下:

{call過(guò)程名}

1.創(chuàng)建

CallableStatement對(duì)象

CallableStatement對(duì)象是用Connection方法prepareCall創(chuàng)建的。下面為創(chuàng)建

CallableStatement的實(shí)例,其中含有對(duì)存儲(chǔ)過(guò)程getEMPData調(diào)用。該過(guò)程有兩個(gè)變量,但不含結(jié)果參數(shù)。

CallableStatementcstmt=con.prepareCall("{callgetEMPData(?,?)}");

其中,?占位符為IN、OUT還是INOUT參數(shù)取決于存儲(chǔ)過(guò)程getEMPData。

2.IN和OUT參數(shù)

將IN參數(shù)傳給CallableStatement對(duì)象是通過(guò)setXXX方法來(lái)完成的。所傳入?yún)?shù)的類型決定了所用的setXXX方法(例如,用setFloat來(lái)傳入float值等)。

如果存儲(chǔ)過(guò)程返回OUT參數(shù),則在執(zhí)行CallableStatement對(duì)象以前先注冊(cè)每個(gè)OUT參數(shù)的JDBC類型,使用registerOutParameter方法來(lái)注冊(cè)。語(yǔ)句執(zhí)行完后,CallableStatement的getXXX方法將取回參數(shù)值。registerOutParameter使用的是JDBC類型(因此它與數(shù)據(jù)庫(kù)返回的JDBC類型匹配),而getXXX將之轉(zhuǎn)換為Java類型。

下面的例子先注冊(cè)O(shè)UT參數(shù),執(zhí)行由cstmt所調(diào)用的存儲(chǔ)過(guò)程,然后檢索在OUT參數(shù)中返回的值。方法setDouble給第一個(gè)IN參數(shù)傳入值,方法

getInt從第二個(gè)

OUT參數(shù)中取出一個(gè)整數(shù)。

CallableStatementcstmt=con.prepareCall("{callgetEMPData(?,?)}");

cstmt.setDouble(1,5000.0);

cstmt.registerOutParameter(2,java.sql.Types.INTEGER);

cstmt.execute();

intx=cstmt.getInt(2);

3.INOUT參數(shù)

既支持輸入又接受輸出的參數(shù)(INOUT參數(shù))不僅要調(diào)用registerOutParameter方法,還要調(diào)用合適的setXXX方法。setXXX方法將參數(shù)設(shè)置為輸入?yún)?shù),registerOutParameter方法將它的JDBC類型注冊(cè)為輸出參數(shù)。應(yīng)該引起注意的是,IN值的JDBC類型和提供給registerOutParameter方法的JDBC類型必須相同。

檢索輸出值時(shí),應(yīng)使用對(duì)應(yīng)的getXXX方法。例如,Java類型為int的參數(shù)應(yīng)該使用方法

setInt來(lái)賦輸入值;應(yīng)該給registerOutParameter提供類型為INTEGER的

JDBC類型。

下例演示了一個(gè)存儲(chǔ)過(guò)程compute,其唯一參數(shù)是INOUT。方法setInt把此參數(shù)設(shè)為25,驅(qū)動(dòng)程序?qū)⑺鳛镴DBCINTERGER類型送到數(shù)據(jù)庫(kù)中。然后,registerOutParameter將該參數(shù)注冊(cè)為JDBCINTEGER。執(zhí)行完該存儲(chǔ)過(guò)程后,將返回一個(gè)新的JDBCTINYINT值。方法getInt將把這個(gè)新值作為JavaInt類型檢索。

CallableStatementcstmt=con.prepareCall("{callcompute(?)}");

cstmt.setInt(1,25);

cstmt.registerOutParameter(1,java.sql.Types.INTEGER);

cstmt.executeUpdate();

intx=cstmt.getInt(1);

11.3.8處理SQL異常

當(dāng)數(shù)據(jù)庫(kù)或JDBC驅(qū)動(dòng)程序發(fā)生錯(cuò)誤時(shí),將拋出一個(gè)java.sql.SQLException。java.sql.SQLException類是java.sql.Exception類的子類。因此,所有的JDBC語(yǔ)句最好放在一個(gè)try/catch語(yǔ)句塊中,否則代碼就要拋出java.sql.SQLException。如果出現(xiàn)這種情況,則JVM還要試圖尋找合適的處理器來(lái)處理這個(gè)異常。如果沒(méi)有找到合適的,則使用默認(rèn)的異常處理器來(lái)處理該異常。使用catch子句后,每當(dāng)出現(xiàn)異常時(shí),JVM會(huì)將控制轉(zhuǎn)移到運(yùn)行這個(gè)catch子句的代碼。在此代碼中,可以顯示錯(cuò)誤編碼和錯(cuò)誤消息,這有助于判斷錯(cuò)誤原因。

java.sql.SQLException類定義了四個(gè)方法,可以幫助查找并判斷出錯(cuò)原因。

(1)getErrorCode():對(duì)于數(shù)據(jù)庫(kù)和JDBC驅(qū)動(dòng)程序中發(fā)生的錯(cuò)誤,此方法返回oracle的錯(cuò)誤編碼(一個(gè)5位的數(shù)字)。

(2)getMessage():對(duì)于數(shù)據(jù)庫(kù)中發(fā)生的錯(cuò)誤,此方法返回錯(cuò)誤消息以及5位的錯(cuò)誤編碼;對(duì)于JDBC驅(qū)動(dòng)程序錯(cuò)誤,此方法只返回錯(cuò)誤消息。

(3)?getSQLState():

對(duì)于數(shù)據(jù)庫(kù)中發(fā)生的錯(cuò)誤,此方法返回5位錯(cuò)誤編碼和SQL的狀態(tài);對(duì)于JDBC驅(qū)動(dòng)程序錯(cuò)誤,此方法不返回任何有意義的內(nèi)容。

(4)printStackTrace():此方法顯示發(fā)生異常時(shí)的堆棧內(nèi)容。下面的例子將演示以上方法的使用。

try{}

catch(SQLExceptione)

{

e.printStackTrace();

System.out.println(e.getMessage());

System.out.println(e.getErrorCode());

System.out.println(e.getSQLState());

}

11.4實(shí)

1.實(shí)例一

在scott用戶模式下,添加一條記錄到EMP表,然后顯示10號(hào)部門(mén)的所有員工姓名。

提示:在eclipse編程環(huán)境下,需導(dǎo)入classes111.jar。

importjava.sql.*;

publicclassSimpleSQLExample{

publicstaticvoidmain(Stringargs[])

{

try{

//DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());Class.forName(“oracle.jdbc.OracleDriver”);//兩種方式都可以

Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@localhost:

1521:ora9","scott","tiger");

Statementstmt=con.createStatement();

stmt.execute("insertintoemp(empno,ename,deptno,sal)values(8002,'atlas',10,5000)");

ResultSetrs=stmt.executeQuery("selectenamefromempwheredeptno=10");

while(rs.next())

{

Stringename=rs.getString(1);

System.out.println(ename);

}

stmt.close();

con.close();

}

catch(Exceptione)

{

System.out.print(e.toString());

}

}

}圖11-1簡(jiǎn)單SQL語(yǔ)句程序

CLARK

KING

MILLER

atlas

2.實(shí)例2

創(chuàng)建一個(gè)給特定員工增加10%薪水的存儲(chǔ)過(guò)程,并返回最新的薪水值。使用JDBC調(diào)用該存儲(chǔ)過(guò)程,打印返回值。

存儲(chǔ)過(guò)程代碼如下:

createorreplaceprocedureraisesal(emp_nonumber,sal_varoutnumber)

as

begin

updateempsetsal=sal*1.1whereempno=emp_no;

selectsalintosal_varfromempwhereempno=emp_no;

end;

/給實(shí)例1中的8002號(hào)薪水為5000的員工漲工資,程序代碼如下:

importjava.sql.*;

publicclasscallprocExample{

publicstaticvoidmain(Stringargs[])

{

try{

//DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

Class.forName("oracle.jdbc.OracleDriver");

Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:

ORa9","scott","tiger");

CallableStatementcstmt=con.prepareCall("{callraisesal(?,?)}");

cstmt.setInt(1,8002);

cstmt.registerOutParameter(2,Types.FLOAT);

cstmt.execute();

floatsal_var=cstmt.getFloat(2);

System.out.print(sal_var);

cstmt.close();

con.close();

}

catch(Exceptione)

{

System.out.print(e.toString());

}

}

}圖11-2調(diào)用存儲(chǔ)過(guò)程的程序

11.5小

結(jié)

JDBC是一個(gè)軟件層,允許開(kāi)發(fā)者在Java中編寫(xiě)客戶端/服務(wù)器程序,它提供了簡(jiǎn)單的接口,用于執(zhí)行原始的SQL語(yǔ)句。Oracle支持簡(jiǎn)單的JDBC訪問(wèn)和開(kāi)發(fā),提供了很多圖形化的應(yīng)用程序來(lái)支持和開(kāi)發(fā)Java程序,如ContainerforJ2EE和Jdeveloper,它涵蓋了性能調(diào)整、開(kāi)發(fā)J2EE組件和Java存儲(chǔ)過(guò)程等技術(shù)。

習(xí)題十一

一、選擇題

1.JDBC的組件是()、()和()。

2.使用()類調(diào)用存儲(chǔ)過(guò)程。

3.executeQuery的返回類型是()。

A.Result B.ResultSet

C.ResultsetD.以上選項(xiàng)都不正確

4.create命令是用()命令執(zhí)行的。

A.executeQueryB.execute

C.?executeUpdate D.?executeCreate二、編程題

1.編寫(xiě)一個(gè)程序,用于創(chuàng)建一個(gè)具有以下列的student表:

stu_idnumber(5)

stu_namevarchar2(20)

agenumber(3)

2.編寫(xiě)一個(gè)程序,往student表里插入三條數(shù)據(jù)。

3.編寫(xiě)程序,檢索student表中的數(shù)據(jù),并按行打印所有的記錄信息。

上機(jī)實(shí)驗(yàn)十一

實(shí)驗(yàn)1創(chuàng)建一段Web程序,用Oracle數(shù)據(jù)源來(lái)檢索并顯示student表中的同學(xué)信息

目的和要求:

1.掌握J(rèn)DBC類。

2.掌握連接訪問(wèn)關(guān)閉數(shù)據(jù)流。

3.掌握傳送簡(jiǎn)單的查詢語(yǔ)句。

實(shí)驗(yàn)內(nèi)容:

importjava.sql.*;

publicclassLab1{

publicstaticvoidmain(Stringargs[])

{

try{

//DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

Class.forName("oracle.jdbc.OracleDriver");//兩種方式都可以

Connectioncon=DriverManager.getConnection

("jdbc:oracle:thin:@localhost:1521:ora9","scott","tiger");

Statementstmt=con.createStatement();

ResultSetrs=stmt.executeQuery("select*fromstudent");

while(rs.next())

{

System.out.println(rs.getInt(1)

+rs.getString(2)+rs.getInt(3));

}

stmt.close();

con.close();

}

catch(Exceptione)

{

System.out.print(e.toString());

}

}

}實(shí)驗(yàn)2創(chuàng)建一段Web程序,在EMP中添加一個(gè)新雇員,要求用SQL語(yǔ)句傳遞參數(shù)

目的和要求:

1.掌握J(rèn)DBC類。

2.掌握連接訪問(wèn)關(guān)閉數(shù)據(jù)流。

3.掌握傳送預(yù)定義語(yǔ)句。

實(shí)驗(yàn)內(nèi)容:

importjava.sql.*;

publicclassLab2{

publicstaticvoidmain(Stringargs[])

{

try{

//DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

Class.forName("oracle.jdbc.OracleDriver");//兩種方式都可以

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論