我正在尝试运行使用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工作也不是当前代码工作,因为我得到一个空指针异常,这意味着没有返回结果集。 我怎么做到这一点?
答案 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);