Catch si valeur inexistante en bdd

Résolu
tototitanium Messages postés 13 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 8 mai 2010 - 1 mai 2010 à 01:54
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 1 mai 2010 à 16:21
Bonjour,

Voila mon soucis: ma méthode marche très bien cependant si je lis une valeur qui n'existe pas en bdd, la fonction saute dans le catch hors je souhaite quelle se poursuive après le catch

public int testRequete()
{
    try 
    {
        for(int i=0; i<tab.size(); i++)  //tab est un ArrayList contenant plusieurs valeur entière (seule sa taille peut varier)
        {
            reponseRequete maConnexion.getRq().executeQuery("SELECT id FROM table WHERE a '" + tab.get(i) + "'");  //on regarde si on trouve un id en fonction de ma liste contenu dans le tableau, si on ne trouve rien on passe à l'élément suivant dans tab           
            reponseRequete.next();
            valeurLue = reponseRequete.getInt("id");
        }
    catch (SQLException ex)
    {
        Logger.getLogger (Test.class.getName()).log(Level.SEVERE, null, ex);
    }

    return valeurLue; 
}

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 mai 2010 à 07:53
Salut,

Teste s'il existe une valeur :
public int testRequete()
{
ResultSet reponseRequete;
try
{
for(int i=0; i<tab.size(); i++) //tab est un ArrayList contenant plusieurs valeur entière (seule sa taille peut varier)
{
reponseRequete maConnexion.getRq().executeQuery("SELECT id FROM table WHERE a '" + tab.get(i) + "'"); //on regarde si on trouve un id en fonction de ma liste contenu dans le tableau, si on ne trouve rien on passe à l'élément suivant dans tab
if (reponseRequete.next()) {
valeurLue = reponseRequete.getInt("id");
}
}
catch (SQLException ex)
{
Logger.getLogger (Test.class.getName()).log(Level.SEVERE, null, ex);
}
finally {
if (reponseRequete != null) {
reponseRequete.close();
}
}

return valeurLue;
}
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
3
tototitanium Messages postés 13 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 8 mai 2010 1
1 mai 2010 à 02:00
Edit: Petite erreur dans mon code de départ valeurLue est normalement un ArrayList lui aussi donc ce n'est plus

valeurLue = reponseRequete.getInt("id");


mais

valeurLue.add(reponseRequete.getInt("id"));




Bref, ma question de départ reste la même avec l'histoire du catch...
0
tototitanium Messages postés 13 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 8 mai 2010 1
1 mai 2010 à 15:25
Bonjour,

Écoutez merci infiniment vous avez résolu mon problème en 2sec alors que je m'arrachais les cheveux pour rien trouver.

Sinon petite question par rapport à votre réponse le bloc finally {}, il sert si cela foire dans le catch non ? Mais si on rentre dans le catch ira t-il dans le finally ensuite ?


Dans tous les cas merci pour tout
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 mai 2010 à 16:03
Salut,

Pas vraiment : le finally est appelé quoiqu'il arrive : qu'il y est une exception ou pas, le bloc finally est appelé.

Dans ton cas, c'est primordial pour fermer le Resultset, sinon tu auras une fuite mémoire !
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tototitanium Messages postés 13 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 8 mai 2010 1
1 mai 2010 à 16:14
Ok, merci pour la précision !

J'en conclus que dans toutes mes méthodes où j'utilise des requêtes je dois faire un close() au Resultset.


Au final, ce sujet m'a résolu deux problèmes en un ! C'est parfait, merci grand maitre Java ! A très bientôt !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 mai 2010 à 16:21
Salut,

Tout à fait, si tu ne fermes par les Resultset (mais également les connexion à ta base de données), attends toi à avoir des exceptions OutOfMemory au bout d'un certain temps.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
Rejoignez-nous