java.sql.SQLException: недопустимое состояние курсора - нет текущей строки

Я продолжаю получать эту ошибку, когда использую метод getString из ResultSet. Я использую возвращенный ResultSet первого метода для второго метода. Соответствующий код:

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";
}

Любая помощь очень ценится в решении этой проблемы.


person RandellK02    schedule 07.07.2011    source источник


Ответы (2)


После оператора while стоит точка с запятой.

while(rs.next());
person Kal    schedule 07.07.2011

Посмотрите на этот код:

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?
}
person Jon Skeet    schedule 07.07.2011
comment
Да, if на самом деле так, как я хотел, но я внес некоторые изменения, поэтому я думаю, что точка с запятой идет туда. Спасибо за вашу помощь. - person RandellK02; 07.07.2011