【问题标题】:ResultSet is not null still resultset.next() returning falseResultSet 不为 null 仍然 resultset.next() 返回 false
【发布时间】:2016-12-12 11:51:20
【问题描述】:

我正在尝试访问一个返回游标的过程,我的结果集不为 null 仍然 resultset.next() 返回 false,这就是为什么控制没有进入 while,请参阅下面提到我的过程和我的 java 代码并帮助我解决这个问题。

这是我的程序:

PROCEDURE get_app_biz_summary (p_application_name_i   IN     VARCHAR2,
                               p_summary_o               OUT SYS_REFCURSOR) IS BEGIN    IF p_application_name_i = 'ALL'    THEN
      OPEN p_summary_o FOR
           SELECT application_name,
                  creation_date,
                  SUM (success_count) success,
                  SUM (error_count) "error",
                  SUM (warning_count) warning
             FROM xxcss_sfm_app_biz_summary
            WHERE 1 = 1 AND creation_date >= SYSDATE - 4
         GROUP BY application_name, creation_date;    ELSE
      OPEN p_summary_o FOR
           SELECT application_name,
                  biz_process_name,
                  creation_date,
                  SUM (success_count) success,
                  SUM (error_count) "error",
                  SUM (warning_count) warning
             FROM xxcss_sfm_app_biz_summary
            WHERE application_name =
                     NVL (p_application_name_i, application_name)
                  AND creation_date >= SYSDATE - 4
         GROUP BY application_name, biz_process_name, creation_date;    END IF; END get_app_biz_summary;

END XXCSS_ORDER_STATUS_PKG;

/ 这是我的java代码:

try {
            OracleCallableStatement cs = (OracleCallableStatement)jdbcTemplate
        //  CallableStatement cs=jdbcTemplate
                    .getDataSource()
                    .getConnection()
                    .prepareCall(
                            "{call APPS.XXCSS_ORDER_STATUS_PKG.GET_APP_BIZ_SUMMARY(?,?)}");

            cs.setString(1, appName);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            resultSet= (OracleResultSet)cs.getCursor(2);
            if(resultSet==null )
                System.out.println("resultset null...."); // resultset is not null
            System.out.println(resultSet.next()); // its returning false
            while(resultSet.next()){
            System.out.println("in while");
                IBSave ibSave=new IBSave();
                ibSave.setApplicationName(resultSet.getString("APPLICATION_NAME"));

【问题讨论】:

标签: java resultset


【解决方案1】:

不要不必要地调用 resultSet.next() 因为根据文档:- http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/sql/ResultSet.java#ResultSet.next%28%29。 如果你打电话给

System.out.println(resultSet.next()); // its returning false

它将光标移动到下一行。 并再次调用

while(resultSet.next()){

实际上指向您的第二行。所以结果集中只返回了一条记录。

【讨论】:

    【解决方案2】:

    1.你能确定你的数据库正在返回数据吗

    2.你能和resultSet= (OracleResultSet)cs.getCursor(2);联系吗? 也许删除这个特定的行??

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 2019-11-08
      • 2010-09-14
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多