当前位置: 首页 > 知识库问答 >
问题:

结果集在executeQuery Mysql-Java中为false,即使存在行

贲俊才
2023-03-14

我使用Java中的preparedStatement从MySql中的表中获取两列。如果直接在mySql DB上执行查询,则查询有效并返回行。但是对于这个方法调用,ResultSet在每个ResultSet上都有值“false”。next()调用。代码如下:

private ResultSet fetchFriends(int lActProfId) throws SQLException {
        // TODO Auto-generated method stub
        String selectRelationQry= "SELECT friend_id, type FROM fs_relationship WHERE profile_id =?";
        System.out.println("---- In method FetchAndInsertInWall()->fetchFriends - Qry: "+selectRelationQry);
        pst = lCon.prepareStatement(selectRelationQry);
        pst.setInt(1, lActProfId);
        System.out.println("lActProfId: "+ lActProfId );
        ResultSet res3 = pst.executeQuery();
        System.out.println("---- temp--- In method FetchAndInsertInWall()->fetchFriends query has no Results");
        if(!res3.next()){
            System.out.println("---- In method FetchAndInsertInWall()->fetchFriends query has no Results");
        } else {System.out.println("Elements in res3: "+res3.next() +  res3.next() + res3.next());
        }
        pst = null;
        return res3;
    }

我在控制台上得到以下输出:

---- In method FetchAndInsertInWall()->fetchFriends - Qry: SELECT friend_id, type FROM fs_relationship WHERE profile_id =?
lActProfId: 5002
---- temp--- In method FetchAndInsertInWall()->fetchFriends query has no Results
Element in res31: false
----> WallInsertions Failed for Uid: 5002
java.sql.SQLException: Illegal operation on empty result set.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2710)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2851)
    at com.fs.javadbact.FetchDataAndInsertInWall.fetchAndInsertInWall(FetchDataAndInsertInWall.java:64)
    at com.fs.javadbact.ConsumerTest.run(ConsumerTest.java:86)
    at java.lang.Thread.run(Unknown Source)
Jan 12, 2014 3:34:57 AM com.fs.javadbact.ConsumerTest run

请帮助我如何解决此问题,并使用正确的数据获得正确的结果集。

共有2个答案

许正平
2023-03-14

使用getString()而不是next()来获取行的值。

如果结果少于三行,则结果集将耗尽。我不知道在返回一次 false 后,next() 是否需要工作。

米元凯
2023-03-14

我认为你忘了在pst变量写入之前声明ReadyStatement

PreparedStatement pst = lCon.prepareStatement(selectRelationQry);
而不是:

pst = lCon.prepareStatement(selectRelationQry);
 类似资料:
  • 问题内容: 我正在尝试对Flask / Python中的SQLAlchemy结果集进行json化。 Flask邮件列表建议使用以下方法http://librelist.com/browser//flask/2011/2/16/jsonify-sqlalchemy-pagination-collection-result/#04a0754b63387f87e59dda564bde426e: 但是我得

  • 问题内容: 我有一个带有2个表的MySql数据库: 国家是公正的。 结果是a ,a和a 。 并非所有国家/地区在每个日期都有结果。 如何创建一个查询,列出所有国家及其特定结果,但仍然列出它们,并且如果结果表上没有结果,则显示0? 问题答案: 在两个表之间使用LEFT JOIN 要显示0(对于该列),如果没有结果,请使用IFNULL。

  • 我想将结果添加到resultset,并使用table显示结果,这是我的java代码 错误显示"未找到列'Janunary'。" 很抱歉我没有获得足够的声誉,所以我将存储过程的结果写如下。 查询代码:

  • 这是我的代码: 因为我使用POM设计模式,所以我为此创建了一种方法: 这是超文本标记语言标签: 我的问题是,即使存在WebElement,isDisplayed()也返回false。

  • 这个问题应该很简单,而且可能会让人恼火,但我仍然对使用Java关闭结果集感到怀疑。每个语句都应该这样做,或者结果集应该只在final中关闭?

  • 我需要迭代resultset中返回的数百万条记录,并对它们进行处理,然后将它们存储在某些数据结构中。我没有找到任何相关的例子或参考。JOOQ似乎在做一些我可能想要的事情,但它似乎不是免费的。我希望,如果使用Java8流,我可能能够实现它,但示例或writeup似乎没有给我任何方向。我也愿意接受其他选择 基于这个SO参考:resultset parallel,我在下面进行了尝试,但它没有给我任何性能