JDBC调用oracle存储过程(out parameter)

首先我们以一个简单的例子开始,在这个例子中,只存在一个返回值。存储过程如下

SQL> create or replace procedure lizhe (aa out varchar2)is
 begin
select password into aa from passport where id='123111';
end lizhe;
  /

补充说明:要注意的是这个存储过程存在一个(aa out varchar2)这样的标识,这是一个参数,out表示这是一个输出参数,在select语句中将password的值“into”到这个参数里


然后再java端:

public static void runProcedure(){
   try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.159:1521:TOPS","YAC3","YAC3");
    java.sql.CallableStatement cs = con.prepareCall("{call lizhe(?)}");
    cs.registerOutParameter(1, java.sql.Types.VARCHAR);
    cs.execute();
    System.out.print("value2:" + cs.getString(1)); //取出字符串——关键


   } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
}


补充说明:cs.registerOutParameter(1, java.sql.Types.VARCHAR);
重点只有这一句

2.多个返回值的

SQL> CREATE OR REPLACE PACKAGE TESTPACKAGE AS

 TYPE Test_CURSOR IS REF CURSOR;
 
end TESTPACKAGE;
 /

Package created

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

 BEGIN
 
     OPEN p_CURSOR FOR 'SELECT * FROM TB';

 END TESTC;
 /

Procedure created


import java.sql.*;

import java.io.OutputStream;

import java.io.Writer;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import oracle.jdbc.driver.*;


public class TestProcedure {

public TestProcedure() {

}

public static void main(String[] args ){

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

    String strUrl = "jdbc:oracle:thin:@192.168.0.159:1521:tops";

    Statement stmt = null;

    ResultSet rs = null;

    Connection conn = null;


    try {

      Class.forName(driver);

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


      CallableStatement proc = null;

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

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

      proc.executeQuery();

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


      while(rs.next())

      {

         System.out.println(rs.getString("VALUE"));

      }

    }

    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) {

      }

    }

}

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的JDBC(Java Database Connectivity)来调用Oracle数据库中的存储过程。下面是调用存储过程的一般步骤: 1. 首先,确保你已经正确地设置了Oracle数据库连接信息,并且已经导入了相关的JDBC驱动。 2. 创建一个Connection对象,用于与数据库建立连接。例如: ```java String url = "jdbc:oracle:thin:@localhost:1521:xe"; String username = "your_username"; String password = "your_password"; Connection connection = DriverManager.getConnection(url, username, password); ``` 3. 创建一个CallableStatement对象,用于执行存储过程。例如: ```java String sql = "{call your_procedure_name(?, ?)}"; CallableStatement cstmt = connection.prepareCall(sql); ``` 4. 设置存储过程的输入参数(如果有)。例如: ```java cstmt.setString(1, "input_parameter_value"); ``` 5. 注册输出参数(如果有)。例如: ```java cstmt.registerOutParameter(2, Types.INTEGER); // 第二个参数为输出参数的位置和类型 ``` 6. 执行存储过程。例如: ```java cstmt.execute(); ``` 7. 获取输出参数的值(如果有)。例如: ```java int outputValue = cstmt.getInt(2); // 获取第二个输出参数的值 ``` 8. 关闭CallableStatement和Connection对象。例如: ```java cstmt.close(); connection.close(); ``` 这是一个基本的jdbc调用存储过程的示例,你可以根据实际情况进行适当的修改和调整。注意,在使用JDBC调用Oracle存储过程时,需要根据具体的存储过程定义和参数类型进行相应的设置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值