在可调用语句中设置out参数

时间:2017-03-24 04:01:25

标签: java stored-procedures jdbc callable out-parameters

我正在尝试运行使用oracle jdbc返回resultSet的存储过程。 程序如下。

create or replace procedure display_players (rset OUT sys_refcursor)
as
Begin
open rset for select * from player_data;
End;
/

java代码如下

try {
sql = "{call display_players()}";
call = conn.prepareCall(sql);
call.execute();
rs = call.getResultSet();

while(rs.next()){
    System.out.println(rs.getString("name") + " : " + rs.getString("club"));
}

我尝试将out参数注册为

call = conn.prepareCall("{call display_players(?)}");
call.registerOutParameter(1, OracleTypes.CURSOR);

但是dint工作也不是当前代码工作,因为我得到一个空指针异常,这意味着没有返回结果集。 我怎么做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为您还没有完全了解如何从存储过程调用中的OUT参数中获取结果集。

首先,您需要注册OUT参数,如第二个代码示例所示:

call = conn.prepareCall("{call display_players(?)}");
call.registerOutParameter(1, OracleTypes.CURSOR);

但是,一旦您执行了该声明,call.getResultSet()获取OUT参数中的结果集就不正确了。例如,假设您正在调用一个存储过程,该存储过程有两个OUT参数返回游标。哪一个应该call.getResultSet()返回?

诀窍是使用call.getObject(...)call中的参数值作为Object,然后将其转换为ResultSet。换句话说,替换

rs = call.getResultSet();

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