2009-10-07 14 views
5

Witam tu jest to, co chcę, mogę połączyć się z DB i odzyskać największy element kolumny UniqueId i przypisać ją do zmiennej całkowitej nazwie maxID, tutaj jest moje podejście:Java ResultSet przy użyciu funkcji SQL MAX

int maxID = 0; 
Statement s2 = con.createStatement(); 
s2.execute("SELECT MAX(UniqueId) FROM MyTable");  
ResultSet rs2 = s2.getResultSet(); // 
while (rs2.next()){ 
    maxID = rs2.getInt(0); 
} 

Jaki byłby przyzwoity sposób rozwiązania tego problemu, to wydaje się bardzo surowy sposób, używając "rs2.next()" podczas pętli.

Dzięki

Odpowiedz

10
if (rs2.next()) { 
    maxID = rs2.getInt(1); 
} 
1

.next() znajduje się przesunąć kursor z „nigdzie” do wiersza, jeżeli takie istnieją.

możesz go przetestować, jeśli chcesz, jest to godne polecenia, ale nie możesz tego uniknąć podczas pętli. Chociaż, jeśli jesteś pewien, że zapytanie będzie zwrócić tylko jeden wiersz, można to zrobić

if (rs.next()) { 
    maxID = rs2.getInt(1); 
} 
+0

wydaje się dobrym pomysłem, ale kiedy zmienia się powyżej Eclipse wyświetla ten błąd: Opis \t zasobów \t Ścieżka \t Lokalizacja \t Rodzaj nie może powoływać getInt (int) na prymitywne typu boolean \t Alertmail.java \t/alertmail/src \t linia 33 \t Java Problem – Hellnar

+0

tak, 'next()' zwraca wartość logiczną, a zatem działa w pętli 'while()'. – akf

+0

tak, prawda, musisz przesunąć kursor zanim będziesz mógł pobrać jakiekolwiek dane, rzuciłam moją odpowiedź. Nie powinienem patrzeć na pytania o tej porze. Zamierzam edytować moją odpowiedź – Juparave

9

Boris Pavlović było prawie dobrze.

if (rs2.next()) { 
    maxID = rs2.getInt(1); 
} 

Kolumny w zestawie wyników są oparte na 1. A powodem użycia if zamiast while jest to, że zapytanie, które wykonujesz, zwraca tylko jeden wiersz.

+0

Właśnie naprawiłem odpowiedź na moje pytanie i dałem ci +1 –