2014-06-25 17 views
6

Używam HSQLDB w moim programie. Chcę sprawdzić, czy mój zestaw wyników jest pusty, czy nie.Sprawdź, czy ResultSet jest pusty w Javie

//check if empty first 
if(results.next() == false){ 
System.out.println("empty"); 
} 

//display results 
while (results.next()) { 
String data = results.getString("first_name"); 
//name.setText(data); 
System.out.println(data); 
} 

Powyższa metoda nie działa poprawnie. Zgodnie z tym post muszę wywołać .first() lub .beforeFirst(), aby ustawić kursor w pierwszym wierszu, ale .first() i .beforFirst() nie są obsługiwane w HSQL. Próbowałem też dodać connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); , ale nadal otrzymuję ten sam wynik (otrzymuję komunikat pusty i dane z DB !!!) Co ja tu robię źle?

+2

Na czym polega problem? Obserwacja: 'result.next()' przenosi kursor do pierwszego wiersza przy pierwszym wywołaniu (w 'if'). W związku z tym, jeśli istnieją dane, warunek Twojej pętli while przeniesie go do drugiego rzędu, gdy zacznie skutecznie pomijać pierwszy wiersz. Zamiast tego możesz użyć pętli do-while. – Abhi

+0

Pytanie, z którym się łączysz, ma również odpowiedź na zestawy wyników "FORWARD_ONLY" (np. Zaakceptowana odpowiedź). –

Odpowiedz

11

Jeśli dobrze rozumiem swój cel, można użyć do while pętla

if (!results.next()) { 
    System.out.println("empty"); 
} else { 
    //display results 
    do { 
    String data = results.getString("first_name"); 
    //name.setText(data); 
    System.out.println(data); 
    } while (results.next()); 
} 

Lub może po prostu zachować count jak tak,

int count = 0; 
//display results 
while (results.next()) { 
    String data = results.getString("first_name"); 
    //name.setText(data); 
    System.out.println(data); 
    count++; 
} 
if (count < 1) { 
    // Didn't even read one row 
} 
+0

twoje pierwsze rozwiązanie działało jak magia. Dziękuję :) –

+0

To samo, po prostu włożyłem to i kilka JUnits zaczęło działać poprawnie. – thonnor

Powiązane problemy