日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

一、需求

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

二、實現步驟

1. 編寫Oracle存儲過程。

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

--調用能夠返回多條記錄的存儲過程需要定義在包內

--聲明包及包內的游標、存儲過程

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調用有返回值的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調用無返回值的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();

}

}

}

}

四、相關知識

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。