结果集没有hasNext方法。我想检查resultSet是否有任何值
这条路对吗
if (!resultSet.next() ) {
System.out.println("no data");
}
结果集没有hasNext方法。我想检查resultSet是否有任何值
这条路对吗
if (!resultSet.next() ) {
System.out.println("no data");
}
当前回答
假设您正在使用一个新返回的ResultSet,其游标指向第一行之前,一个更简单的检查方法是调用isBeforeFirst()。这避免了在读取数据时必须回溯。
正如文档中解释的那样,如果游标不在第一条记录之前,或者结果集中没有行,则返回false。
if (!resultSet.isBeforeFirst() ) {
System.out.println("No data");
}
其他回答
我一直试图将当前行设置为第一个索引(处理主键)。我建议
if(rs.absolute(1)){
System.out.println("We have data");
} else {
System.out.println("No data");
}
填充ResultSet时,它指向第一行之前。当将它设置为第一行(由rs.absolute(1)表示)时,它将返回true,表示它成功地放置在第一行,如果该行不存在则返回false。我们可以推断
for(int i=1; rs.absolute(i); i++){
//Code
}
它将当前行设置为位置I,如果该行不存在,将失败。这是另一种方法
while(rs.next()){
//Code
}
为了完全确定无论光标位置如何,结果集是否为空,我将这样做:
public static boolean isMyResultSetEmpty(ResultSet rs) throws SQLException {
return (!rs.isBeforeFirst() && rs.getRow() == 0);
}
如果ResultSet为空,此函数将返回true;如果ResultSet为空,则返回false;如果ResultSet为关闭/未初始化,则抛出SQLException。
如果您想查看结果集中是否有任何行,这将起作用。
请注意,next()总是移动到下一行,因此如果您计划从结果集中进行任何读取操作,则需要考虑到这一点。
通常使用ResultSet(当简单读取时)是:
while (resultSet.next())
{
... read from the row here ...
}
如果已经调用next()一次来检查结果集是否为空,那么显然不能正确工作,所以要注意这一点。尽管存在用于“备份”的方法,但并非所有类型的结果集都支持这些方法。
我相信这是一篇实用且易于阅读的文章。
if (res.next()) {
do {
// successfully in. do the right things.
} while (res.next());
} else {
// no results back. warn the user.
}
提醒一句,
如果你使用的是org.springframework.jdbc.core.RowMapper 非常小心你是如何检查你的ResultSet是空的,因为 下面的语句适用于mapRow方法:
该方法不应该在ResultSet上调用next();它只应该映射当前行的值。<-来自文档
在这种情况下,你的支票可能会变成
resultSet.beforeFirst();
if (!resultSet.next() ) {
System.out.println("no data");
}