2016-04-01 9 views
0

Ich habe eine einzeilige Abfrage Ausgang loks wie untenJDBC einreihige resultset Zugriffsfehler

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

auf die Daten zuzugreifen I Ergebnismenge bin mit (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()); 

Ich erhalte diesen Fehler :

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

Was mache ich falsch?

+0

Sie müssen das Ergebnis Ihres 'first()' Anruf (mit einem 'if') prüfen, siehe https://docs.oracle.com/javase/8/docs /api/java/sql/ResultSet.html#first() Der einfache Weg besteht darin, die Funktion do/while durch eine Weile zu ersetzen. –

+0

Sie müssen 'next()' ** aufrufen, bevor ** Sie auf die Daten zugreifen. Ihr Code nennt es _after_ –

Antwort

1

ResultSet.first() gibt ein boolean angibt, ob es auf einer Zeile ist oder nicht:

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

dies zu überprüfen, bevor Sie die ResultSet zuzugreifen versuchen. Eine alternative Struktur Code:

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

Ich habe versucht, während (rSet.next()) { } Ich bekomme den gleichen Fehler. aber rSet ist nicht leer als ein Zähler innerhalb der Zeit bis zu 1 – Dhiman

+0

@Dhiman Sie müssen ** Dinge in der While-Schleife tun, andernfalls, wenn die While-Schleife beendet wird, sind Sie ** nach ** der letzten Zeile. Sie müssen nur Ihre Do-While-Schleife durch eine while-Schleife ersetzen und den unnötigen Aufruf zu "first()" entfernen. –