无法从 Java ResultSet 访问数据 [重复]

Posted

技术标签:

【中文标题】无法从 Java ResultSet 访问数据 [重复]【英文标题】:Cannot access data from Java ResultSet [duplicate] 【发布时间】:2017-08-23 18:31:26 【问题描述】:

我正在尝试访问从 Java ResultSet 对象获得的一些数据。

Context ctx = new InitialContext();
DataSource datasource = ctx.lookup("database")

PreparedStatement query = datasource.getConnection().prepareStatement( "select * \n" +
                    "from appDb.market a \n" +
                    "where not exists \n" +
                    "(select * from mainDb.market b where a.id = b.id);");

    ResultSet rs = query.executeQuery();

            if (rs.next())
                //The code will not reach this condition
                System.out.println("Data found!");
            

但是,由于某种原因,rs.next() 的评估结果不正确,即使目前 ResultSet 的 rowData 确实有行..

我可以在调试工具中访问结果集的rowData对象,可以看到行的大小是1,但是我不能访问该行。我想我一定是在做一些傻事,但我不太确定。

【问题讨论】:

尝试直接对数据库运行相同的查询,看看是否能得到结果。您有一个非空的内部数据结构这一事实并不表示您有一个实际的行。 @RealSkeptic 我已经这样做了,它确实返回了结果。 @RealSkeptic 难道它只返回一行(它是),因为我只得到一行,rs.next() 不会评估为真? 不。如果不先调用rs.next(),您将无法获得任何结果。也许您没有向我们展示整个代码。该代码周围有try 吗? catch 包括什么?请edit你的问题并展示整个事情。 在尝试提出更多问题之前,请阅读How do I ask a good question?。 【参考方案1】:

documentation 是这样写的:

如果新的当前行有效则为真;如果没有更多行,则为 false

在你的情况下,因为没有更多的行,它应该返回 false。

此外,您可能希望使用 first() 代替您的条件用例。

【讨论】:

但是文档还说它从第一行开始之前,所以如果确实有一行,next() 应该返回true

以上是关于无法从 Java ResultSet 访问数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java中,将ResultSet映射为对象和队列及其他辅助函数

无法从 MySql 数据库中获取 ResultSet

如何从 JDBC ResultSet 中获取列数?

ZF2:TableGateway ResultSet 到 JSON

java连接Oracle数据库,从ResultSet中提取数据出现java.sql.sqlException结果集已耗尽

Java数据库——ResultSet接口