日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程

發(fā)布時間:2024/9/27 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、需求

傳入一個參數(shù),返回一條或多條記錄(列表)。

二、實現(xiàn)步驟

1. 編寫Oracle存儲過程。

--?聲明包和包體的語句應(yīng)該分兩次執(zhí)行,即使聲明在前定義在后,如果一起執(zhí)行依然會編譯出錯

--調(diào)用能夠返回多條記錄的存儲過程需要定義在包內(nèi)

--聲明包及包內(nèi)的游標(biāo)、存儲過程

CREATE OR REPLACE PACKAGE pack_myPackage ISTYPE myCursorIS REF CURSOR;PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, myCursor OUT myCursor);ENDpack_myPackage;--定義包體

CREATE OR REPLACE PACKAGE BODY pack_myPackage IS

PROCEDURE proc_querySomeInfo(pNo IN VARCHAR2, outcursor OUT myCursor) IS

BEGIN

OPEN outcursor FORSELECT * FROM tableA WHERE P_NO =pNo;ENDproc_querySomeInfo;END pack_myPackage;

2. 編寫Java代碼

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;/*** 存儲過程測試

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call pack_myPackage.proc_getSomeInfo(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

cstmt.execute();

rs= (ResultSet) cstmt.getObject(2);if (rs != null) {while(rs.next()) {

System.out.println(rs.getString(1));

}

}

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

三、 其他需求

1. Java調(diào)用有返回值的Oracle存儲過程(返回一個簡單類型的值)

(1)定義存儲過程:

CREATE OR REPLACE PROCEDURE proc_A(param1 IN VARCHAR2, param2 OUT VARCHAR2)AS

BEGIN

SELECT name INTO param2 FROM T_A WHERE id =param1;END;

(2)編寫Java代碼:

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;

/*** 存儲過程測試

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call proc_A(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

cstmt.execute();

System.out.println("Output is:" + cstmt.getString(2));}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

2. Java調(diào)用無返回值的Oracle存儲過程(無返回值)

(1)定義存儲過程:

CREATE OR REPLACE PROCEDURE proc_B(param1 IN VARCHAR2, param2 IN VARCHAR2)AS

BEGIN

INSERT INTO T_B VALUES(param1, param2);END;

(2)編寫Java代碼:

packagevip.yaocn.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;import java.sql.ResultSet;

/*** 存儲過程測試

*

*@authoryacon*/

public classProcedureTest {public static void main(String[] args) throwsException {

String url= "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String driverName= "oracle.jdbc.driver.OracleDriver";

String username= "scott";

String password= "tiger";

Connection conn= null;

CallableStatement cstmt= null;

ResultSet rs= null;try{

Class.forName(driverName);

conn=DriverManager.getConnection(url, username, password);

String callSql= "{call proc_B(?, ?) }";

cstmt=conn.prepareCall(callSql);

cstmt.setString(1, "1001");

cstmt.setString(2, "TEST");

cstmt.execute();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (rs != null) {

rs.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (cstmt != null) {

cstmt.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if (conn != null) {

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

四、相關(guān)知識

1. 在plsql developer中測試存儲過程時可以在存儲過程名上右擊選擇 “測試” ,如果需要提供參數(shù)可以在下方填入?yún)?shù),如果沒有參數(shù)則點擊執(zhí)行按鈕即可。

總結(jié)

以上是生活随笔為你收集整理的java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。