【发布时间】: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?。