如何从 Java JDBC 中的 callableStatement 获取滚动不敏感的结果集?

Posted

技术标签:

【中文标题】如何从 Java JDBC 中的 callableStatement 获取滚动不敏感的结果集?【英文标题】:How to obtain an scroll_insensitive resultSet from a callableStatement in Java JDBC? 【发布时间】:2009-12-16 00:30:39 【问题描述】:

我在 Oracle 10g 数据库中有一个存储过程,在我的 java 代码中,我调用它:

CallableStatement cs = bdr.prepareCall("Begin ADMBAS01.pck_basilea_reportes.cargar_reporte(?,?,?,?,?); END;", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    cs.setInt(1, this.reportNumber);
    cs.registerOutParameter(2, OracleTypes.CURSOR);
    cs.registerOutParameter(3, OracleTypes.INTEGER);
    cs.registerOutParameter(4, OracleTypes.VARCHAR);
    cs.setDate(5, new java.sql.Date(this.fecha1.getTime()));
    cs.execute();

ResultSet rs = (ResultSet)cs.getObject(2);

我确实获得了一个包含正确记录的 ResultSet,但是当我尝试“scroll_insensitive - only”操作时(如 absolute(1) )。我不断收到一个 SQLException,指出它不适用于 FORWARD only resultSet。

那么我怎样才能获得这个带有 scroll_insensitive 功能的 ResultSet 呢?

提前致谢。

【问题讨论】:

【参考方案1】:

结果集类型只是给驱动程序的一个建议,如果它不能遵守,驱动程序可以忽略或降级为 FORWARD_ONLY。详情请见here。

【讨论】:

感谢您的链接,我已经检查了对结果集类型的限制,这似乎不是唯一的问题。我已将查询更改为更简单的查询,只是为了尝试并且我不断得到相同类型的结果集。

以上是关于如何从 Java JDBC 中的 callableStatement 获取滚动不敏感的结果集?的主要内容,如果未能解决你的问题,请参考以下文章

如何从线程返回信息——轮询回调Callable

从源码角度详解Java的Callable接口

如何从 JDBC 创建或替换 Oracle 中的过程?

如何使用 JDBC/Java 访问和显示 MySQL 关系数据库中的特定记录?

如何从 JDBC 中的存储过程中获取输出

java - 如何在java jdbc中使用sqoop从sql server导入hive?