CURSOR 和 REF CURSOR 作为 JDBC 数据类型

Luk*_*der 4 java oracle jdbc ref-cursor

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

TYPE t_cursor_type IS REF CURSOR;
CREATE PROCEDURE p (c OUT t_cursor_type);
Run Code Online (Sandbox Code Playgroud)

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

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

ata*_*lor 7

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));
}
Run Code Online (Sandbox Code Playgroud)