您的位置:首页 > 编程语言 > Java开发

java获取存储过程返回的结果集

2015-04-14 10:57 302 查看
目的:存储过程查询一张表得到多条记录,由java获取这些记录。

例子:

1、创建一张表,插入数据

CREATE TABLE TEST_TABLE(

       ID NUMBER(16),

       NAME VARCHAR2(20)

);

insert into TEST_TABLE (ID, NAME) values ('1', '张三');

insert into TEST_TABLE (ID, NAME) values ('2', '李四');

2、创建存储过程

--包头
CREATE OR REPLACE PACKAGE PKG_TEST IS

  TYPE CURSOR_TYPE IS REF CURSOR;--用于接收结果的游标

  PROCEDURE P_TEST(O_CURSOR OUT CURSOR_TYPE);--存储过程

END PKG_TEST;
--包体
CREATE OR REPLACE PACKAGE BODY PKG_TEST IS

  PROCEDURE P_TEST(O_CURSOR OUT CURSOR_TYPE) IS--输出的是包头中定义的游标

  BEGIN

    OPEN O_CURSOR FOR

      SELECT ID, NAME FROM TEST_TABLE;--将查询结果放入游标中

  END P_TEST;

END PKG_TEST;

3、编写java代码

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import oracle.jdbc.OracleCallableStatement;

 

public class Test {

 public static void main(String[] args) {

  Connection conn = null;

  CallableStatement proc = null;

  ResultSet rs = null;

  try {

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

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

   proc = conn.prepareCall("{ call PKG_TEST.P_TEST(?) }");//存储过程包.名

   proc.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//需要注册输出的参数

   proc.execute();//执行存储过程

   rs = ((OracleCallableStatement) proc).getCursor(1);//获取结果集

   while (rs.next()) {

    System.out.println("ID:" + rs.getInt("ID") + " NAME:" + rs.getString("NAME"));

   }

  } catch (ClassNotFoundException e) {

   e.printStackTrace();

  } catch (SQLException e) {

   e.printStackTrace();

  } finally {

   try {

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

    if (conn != null && !conn.isClosed()) conn.close();

    rs = null;

    conn = null;

   } catch (SQLException e) {

    e.printStackTrace();

   }

  }

 }

}

 

4、代码执行结果如下:

ID:1 NAME:张三

ID:2 NAME:李四

5、注意:

如果报"类型长度大于最大值"的错,按照网上资料,将1.29M的ojdbc14.jar包替换为1.46M的后解决。可以在oracle安装目录product\10.2.0\db_1\jdbc\lib下找到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息