结果集没有hasNext方法。我想检查resultSet是否有任何值

这条路对吗

if (!resultSet.next() ) {
    System.out.println("no data");
} 

当前回答

你可以这样做

boolean found = false;

while ( resultSet.next() )
{
    found = true;
    resultSet.getString("column_name");
}

if (!found)
    System.out.println("No Data");

其他回答

假设您正在使用一个新返回的ResultSet,其游标指向第一行之前,一个更简单的检查方法是调用isBeforeFirst()。这避免了在读取数据时必须回溯。

正如文档中解释的那样,如果游标不在第一条记录之前,或者结果集中没有行,则返回false。

if (!resultSet.isBeforeFirst() ) {    
    System.out.println("No data"); 
} 

 

最好使用ResultSet.next()和do{…} while()语法。

“检查任何结果”调用ResultSet.next()将光标移动到第一行,因此使用do{…} while()语法来处理该行,同时继续处理循环返回的其余行。

通过这种方式,您可以检查任何结果,同时也可以处理返回的任何结果。

if(resultSet.next()) { // Checks for any results and moves cursor to first row,
    do { // Use 'do...while' to process the first row, while continuing to process remaining rows

    } while (resultSet.next());
}

如果您想查看结果集中是否有任何行,这将起作用。

请注意,next()总是移动到下一行,因此如果您计划从结果集中进行任何读取操作,则需要考虑到这一点。

通常使用ResultSet(当简单读取时)是:

while (resultSet.next())
{
   ... read from the row here ...
}

如果已经调用next()一次来检查结果集是否为空,那么显然不能正确工作,所以要注意这一点。尽管存在用于“备份”的方法,但并非所有类型的结果集都支持这些方法。

根据最可行的答案,建议使用“isBeforeFirst()”。如果你没有“只转发类型”,这不是最好的解决方案。

有一个叫做".first()"的方法。要得到完全相同的结果,这就不那么过分了。您检查“结果集”中是否有内容,但没有移动光标。

文档声明:“(…)如果结果集中没有行则为false”。

if(rs.first()){
    //do stuff      
}

您也可以只调用isBeforeFirst()来测试是否有任何行返回而不移动游标,然后正常进行。- SnakeDoc 14年9月2日19:00

但是,"isBeforeFirst()"和"first()"是有区别的。首先,如果对“仅向前”类型的结果集执行操作,则会生成异常。

比较这两个throw部分: http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html isBeforeFirst () http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html第()

好的,基本上这意味着你应该使用“isBeforeFirst”,只要你有一个“仅转发”类型。否则,使用“first()”就不会那么夸张了。

你通常会这样做:

while ( resultSet.next() ) { 
   // Read the next item
   resultSet.getString("columnName");
}

如果要报告一个空集,请添加一个变量来计算读取的项。如果您只需要阅读一个项目,那么您的代码就足够了。