我正在尝试运行一个使用 oracle jdbc 返回结果集的存储过程。 流程如下。
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);
但是该功能不起作用,当前代码也不起作用,因为我收到空指针异常,这意味着未返回结果集。 我该如何实现这一目标?
最佳答案
我认为您还没有完全弄清楚如何从存储过程调用的 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);
关于java - 在可调用语句中设置 out 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991191/