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

歡迎訪問 生活随笔!

生活随笔

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

java

oracle java调用存储过程_Java调用Oracle存储过程

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

一:無返回值的存儲過程

存儲過程為:

CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

BEGIN

INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES(PARA1, PARA2);END TESTA;

然后呢,在java里調用時就用下面的代碼:

import java.sql.*;importjava.sql.ResultSet;public classTestProcedureOne {publicTestProcedureOne() {

}public static voidmain(String[] args ){

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

String strUrl= "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";

Statement stmt= null;

ResultSet rs= null;

Connection conn= null;

CallableStatement cstmt= null;try{

Class.forName(driver);

conn= DriverManager.getConnection(strUrl, " hyq ", " hyq ");

CallableStatement proc= null;

proc= conn.prepareCall("{ call HYQ.TESTA(?,?) }");

proc.setString(1, "100");

proc.setString(2, "TestOne");

proc.execute();

}catch(SQLException ex2) {

ex2.printStackTrace();

}catch(Exception ex2) {

ex2.printStackTrace();

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

rs.close();if(stmt!=null){

stmt.close();

}if(conn!=null){

conn.close();

}

}

}catch(SQLException ex1) {

}

}

}

}

當然了,這就先要求要建張表TESTTB,里面兩個字段(I_ID,I_NAME)。

二:有返回值的存儲過程(非列表)

存儲過程為:

CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS

BEGIN

SELECT INTO PARA2 FROM TESTTB WHERE I_ID=PARA1;END TESTB;

在java里調用時就用下面的代碼:

public classTestProcedureTWO {publicTestProcedureTWO() {

}public static voidmain(String[] args ){

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

String strUrl= "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

Statement stmt= null;

ResultSet rs= null;

Connection conn= null;try{

Class.forName(driver);

conn= DriverManager.getConnection(strUrl, " hyq ", " hyq ");

CallableStatement proc= null;

proc= conn.prepareCall("{ call HYQ.TESTB(?,?) }");

proc.setString(1, "100");

proc.registerOutParameter(2, Types.VARCHAR);

proc.execute();

String testPrint= proc.getString(2);

System.out.println("=testPrint=is="+testPrint);

}catch(SQLException ex2) {

ex2.printStackTrace();

}catch(Exception ex2) {

ex2.printStackTrace();

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

rs.close();if(stmt!=null){

stmt.close();

}if(conn!=null){

conn.close();

}

}

}catch(SQLException ex1) {

}

}

}

}}

注意,這里的proc.getString(2)中的數值2并非任意的,而是和存儲過程中的out列對應的,如果out是在第一個位置,那就是proc.getString(1),如果是第三個位置,就是proc.getString(3),當然也可以同時有多個返回值,那就是再多加幾個out參數了。

三:返回列表

由于oracle存儲過程沒有返回值,它的所有返回值都是通過out參數來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數,必須要用pagkage了.所以要分兩部分,

1,??建一個程序包。如下:

CREATE OR REPLACE PACKAGE TESTPACKAGE ASTYPE Test_CURSORIS REF CURSOR;end TESTPACKAGE;

2,建立存儲過程,存儲過程為:

CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS

BEGIN

OPEN p_CURSOR FOR SELECT * FROMHYQ.TESTTB;END TESTC;

可以看到,它是把游標(可以理解為一個指針),作為一個out?參數來返回值的。

在java里調用時就用下面的代碼:

import java.sql.*;importjava.io.OutputStream;importjava.io.Writer;importjava.sql.PreparedStatement;importjava.sql.ResultSet;import oracle.jdbc.driver.*;public classTestProcedureTHREE {publicTestProcedureTHREE() {

}public static voidmain(String[] args ){

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

String strUrl= "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

Statement stmt= null;

ResultSet rs= null;

Connection conn= null;try{

Class.forName(driver);

conn= DriverManager.getConnection(strUrl, "hyq", "hyq");

CallableStatement proc= null;

proc= conn.prepareCall("{ call hyq.testc(?) }");

proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

proc.execute();

rs= (ResultSet)proc.getObject(1);while(rs.next())

{

System.out.println("

" + rs.getString(1) + ""+rs.getString(2)+"");

}

}catch(SQLException ex2) {

ex2.printStackTrace();

}catch(Exception ex2) {

ex2.printStackTrace();

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

rs.close();if(stmt!=null){

stmt.close();

}if(conn!=null){

conn.close();

}

}

}catch(SQLException ex1) {

}

}

}

}

另類Java存儲過程調用方法封裝

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

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

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