2009-10-07 8 views
5

Bonjour voici ce que je veux, je me connecte à un DB et récupérer le plus grand élément de la colonne UniqueId, et l'assigner à une variable entière nommée maxid, voici mon approche:java ResultSet, en utilisant la fonction MAX sql

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

Quelle serait une bonne façon de résoudre cela, il se sent comme une manière très grossière en utilisant « rs2.next() » en boucle.

Merci

Répondre

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

.next() est de repositionner le curseur de « nulle part » à une ligne le cas échéant.

vous pouvez le tester si vous voulez, il est recommandé que vous fassiez, ne peut donc pas échapper à cette boucle while. Bien que si vous êtes certain que la requête ne retournera une seule ligne, vous pouvez le faire

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

semble être une bonne idée, mais, quand je change comme ci-dessus Eclipse affiche cette erreur: Description de \t ressources \t Chemin \t Localisation \t type ne peut être invoqué getInt (int) sur le type primitif booléen \t Alertmail.java \t/AlertMail/src \t ligne 33 \t Java problème – Hellnar

+0

oui, 'côté()' renvoie une valeur booléenne, et fonctionne donc dans la boucle 'while()'. – akf

+0

oui, est juste, vous devez repositionner le curseur avant yo peut chercher toutes les données, je me suis précipité ma réponse. Je ne devrais pas regarder les questions à cette heure de la nuit. Je vais modifier ma réponse – Juparave

9

Boris Pavlović avait presque raison.

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

Les colonnes d'un jeu de résultats sont basées sur 1. Et la raison d'utiliser if au lieu de while est que la requête que vous exécutiez retourne uniquement une seule ligne.

+0

Je viens de réponse fixe mine et vous a donné 1 –

Questions connexes