CallableStatement.getResultSet()调用一个Oracle函数时,总是返回

2019-10-17 17:07发布

我执行以下代码:

CallableStatement cs;
cs = conn.prepareCall("{ ? = call mypackage.myfunc()}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
System.out.println(cs.execute());
System.out.println(cs.getResultSet());
ResultSet rs = (ResultSet) cs.getObject(1);
System.out.println(rs);

该函数声明如下:

CREATE OR REPLACE PACKAGE BODY myuser.mypackage AS 
FUNCTION myfunc
return sys_refcursor 
is 
a_cursor sys_refcursor; 
begin 
open a_cursor for select * from mytable; 
return a_cursor; 
end myfunc; 
end mypackage; 
/ 

根据该文件,如果有结果,那么cs.execute()将返回true和cs.getResultSet()将有一个值。 然而,这是输出I得到:

false
null
oracle.jdbc.driver.OracleResultSetImpl@b92a848

我使用Oracle快捷11.2.0和最新的驱动程序。

任何提示/解释/件事,试图将是非常欢迎的。

谢谢!

Answer 1:

getResultSet()通常用于与PreparedStatement s表示返回数据从SQL SELECT查询,而不是通过调用存储过程或函数。 所以我完全期待的falsenull ,你所看到的值。

如果你有一个存储过程返回一个或多个REF游标,那么你使用读取值getObject扔来ResultSet秒。 事实上,你的代码上面正是这样做的,所以我不明白你为什么需要“的东西去尝试。”

一个SQL SELECT语句所选择的数据发送某处,而是因为你不能把一个绑定参数或诸如此类到SQL作为目的地的数据,你需要通过JDBC获得访问这些数据的单独机制。 这是什么getResultSet()是。 你的功能通过绑定参数返回REF游标,所以没有任何需要一个隐含的“结果”,因为你可以通过绑定参数访问数据。



文章来源: CallableStatement.getResultSet() always return null when calling an Oracle function