CURSOR 和 REF CURSOR 作为 JDBC 数据类型

Posted

技术标签:

【中文标题】CURSOR 和 REF CURSOR 作为 JDBC 数据类型【英文标题】:CURSOR and REF CURSOR as a JDBC data type 【发布时间】:2011-06-30 22:52:17 【问题描述】:

许多 RDBMS 支持某种“CURSOR”类型。这些类型在从存储过程返回时最有用。 Oracle 中的一个示例:

TYPE t_cursor_type IS REF CURSOR;
CREATE PROCEDURE p (c OUT t_cursor_type);

使用 JDBC 调用此过程时,应使用 OracleTypes.CURSOR = -10“JDBC”类型。这种类型不是任何标准的一部分,也不会成为 Java 7 中 JDBC 4.1 的一部分。

有谁知道 JSR 人员将来是否会考虑将这种类型添加到标准中?或者其他 RDBMS 是否有类似的“供应商特定类型”?

【问题讨论】:

是的,尤其是考虑到几乎每个数据库都有游标。虽然我也只使用过 Oracle,但在 Google 上快速搜索 游标会显示以下结果:MSSql、mysql、postgre 和 db2。只有 sqlite(并不奇怪)似乎没有它们.. @Voo,即使是 H2 也支持函数结果中的“光标”... 【参考方案1】:

在 Java 8/JDBC 4.2 中添加了对 REF CURSORS 的支持。使用 Types.REF_CURSOR 类型作为游标返回类型。它们可以通过ResultSet 接口进行迭代。示例:

CallableStatement cstmt = conn.prepareCall("callmySproc(?)");
cstmt.registerOutParameter(1, Types.REF_CURSOR);
cstmt.executeQuery();
ResultSet cursor = cstmt.getObject(1, ResultSet.class);
while(cursor.next()) 
    System.out.println("Name = " + cursor.getString(1));

【讨论】:

以上是关于CURSOR 和 REF CURSOR 作为 JDBC 数据类型的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 PLSQL 函数调用 ref_cursor

PLSQL中显示Cursor隐示Cursor动态Ref Cursor差别

PLSQL中显示Cursor隐示Cursor动态Ref Cursor差别

Oracle ref cursor和sys_refcursor

未知方言支持 REF_CURSOR 参数

REF CURSOR 总结