2016-04-01 3 views
0

У меня есть одна строка запроса вывода LOKS, как показано нижеJDBC ошибка доступа к одной строки результирующего

Product | Process | s_int 
-------------------------- 
W01  | AP_03 | 1 

Для того, чтобы получить доступ к данным, я использую результирующий набор (Rset)

rSet.first(); 
do{ 
    product = rSet.getString("PRODUCT"); 
    process = rSet.getString("PROCESS"); 
    s_int = rSet.getInt("S_INT"); 

    System.out.println("Hello Product["+rSet.getString("PRODUCT")+"] Process["+rSet.getString("PROCESS")+"] S_Int["+rSet.getInt("sint")+"]"); 
}while(rSet.next()); 

я получаю эту ошибку :

The result set has no current row and the returns are null and 0.

Что я делаю неправильно?

+0

вам нужно проверить результат вашего 'первого()' вызова (с 'if'), см https://docs.oracle.com/javase/8/docs /api/java/sql/ResultSet.html#first() Простым способом является замена do/while на некоторое время здесь –

+0

вам нужно вызвать 'next()' ** до того, как ** вы получите доступ к данным. Ваш код называет его _after_, что –

ответ

1

ResultSet.first() возвращает boolean, указывающий, если он находится на строке или нет:

true if the cursor is on a valid row; false if there are no rows in the result set

Проверить это, прежде чем пытаться получить доступ к ResultSet. Альтернативная структуре коды:

//final ResultSet rSet = stmt.executeQuery("..."); 
while (rSet.next()) 
{ 
} 
+0

Я пробовал while (rSet.next()) { } Я получаю ту же ошибку. но rSet не пуст в качестве счетчика внутри сообщения, получая 1 – Dhiman

+0

@Dhiman. Вам нужно ** делать ** вещи в цикле while, иначе, когда цикл while выйдет, вы получаете ** после ** последней строки. Вам нужно только заменить цикл do-while на цикл while и удалить ненужный вызов 'first()'. –