java.sql.SQLException:无效的游标状态-无当前行

java.sql.SQLException:无效的游标状态-无当前行,java,sql,derby,embedded-database,Java,Sql,Derby,Embedded Database,当我使用ResultSet中的getString方法时,我一直遇到这个错误。我将第一个方法的返回结果集用于第二个方法。相关代码: public ResultSet getStudentRS(){ try{ studentRS = s.executeQuery("SELECT * FROM Students " + "WHERE StudentID=210569906"); } catch(SQLException error

当我使用ResultSet中的getString方法时,我一直遇到这个错误。我将第一个方法的返回结果集用于第二个方法。相关代码:

public ResultSet getStudentRS(){
    try{
        studentRS = s.executeQuery("SELECT * FROM Students "
                + "WHERE StudentID=210569906");
    }
    catch(SQLException error){
        System.err.println("Unable to query for getStudentRS.");
        error.printStackTrace(System.err);
        System.exit(0);
    }
    return studentRS;
}

public String getUserName(){
    try{
        while(rs.next())
            return rs.getString(1) + " " + rs.getString(2); // Exception Here
    }
    catch(SQLException error){
        System.err.println("Unable to query for getUserName.");
        error.printStackTrace(System.err);
        System.exit(0);
    }
    return "Failure";
}
非常感谢您在解决此问题时提供的任何帮助。

请查看以下代码:

while(rs.next());
return rs.getString(1) + " " + rs.getString(2);
您正在循环浏览所有数据,直到将光标移离最后一行。。。然后试图获取数据。鉴于您的缩进,我怀疑您不打算在while循环结束时使用分号-这就是为什么使用大括号以及让IDE格式化代码总是很好的原因。。。这让这类事情变得显而易见。即使没有分号,我也不认为这是最好的表达方式

我想你想要:

if (rs.next())
{
    return rs.getString(1) + " " + rs.getString(2);
}
else
{
    // What do you want to do if there are no results?
}

while语句后面有一个分号

while(rs.next());

是的,if实际上是我想要的方式,但是我做了一些改变,所以我想分号就是这样出现的。谢谢你的帮助。