CURSOR and REF CURSOR as a JDBC data type

2020-07-22 07:16发布

Many RDBMS support "CURSOR" types of some sort. Those types are mostly useful when returned from stored procedures. An example in Oracle:

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

When calling this procedure using JDBC, the OracleTypes.CURSOR = -10 "JDBC" type should be used. This type is not part of any standard and it is not going to be part of JDBC 4.1 in Java 7.

Does anyone know whether the JSR guys will consider adding this type to the standard some time in the future? Or if other RDBMS have a similar "vendor-specific type"?

1条回答
Rolldiameter
2楼-- · 2020-07-22 07:57

Support for REF CURSORS was added in Java 8/JDBC 4.2. Use the type Types.REF_CURSOR for cursor return types. They can be iterated through the ResultSet interface. Example:

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));
}
查看更多
登录 后发表回答