无法从 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映射为对象和队列及其他辅助函数
ZF2:TableGateway ResultSet 到 JSON
java连接Oracle数据库,从ResultSet中提取数据出现java.sql.sqlException结果集已耗尽