IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

getResultSet() suivi d'un test conditionnel: comportement étrange


Sujet :

JDBC Java

  1. #1
    Membre régulier Avatar de SpecialCharacter
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 72
    Points
    72
    Par défaut getResultSet() suivi d'un test conditionnel: comportement étrange
    Bonjour chère communauté :-)

    Pour un projet, je récupère bêtement un entier issu d'un count dans une table d'une base MySQL
    Sitôt récupéré, il est comparé dans un test conditionnel...rien d'inhabituel, pour vous comme pour moi
    Seulement, après test, l'application ne fait rien

    Quand je dis qu'elle ne fait rien, c'est en constatant ceci:
    - L'interface ne gèle pas et est toujours aussi réactive (utilisation de SwingWorker)
    - Le bloc d'instruction découlant du if n'est pas executé, ni celui du else
    - Aucun message d'erreur n'est généré

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Class.forName("com.mysql.jdbc.Driver");
    connexion = DriverManager.getConnection("jdbc:mysql://" + Fonctions.getConfiguration("bdd_url") + "/" + Fonctions.getConfiguration("bdd_base"), Fonctions.getConfiguration("bdd_user"), Fonctions.getConfiguration("bdd_pwd"));
    publish("CONNEXION_SUCCES");
    Statement   instruction = connexion.createStatement();
    // Thread.sleep(1000);
    publish("INTERROGATION");
    // Interrogation de la base sur le nombre de notifications non lues
    String requete =
    	"SELECT COUNT(*) " +
    	"FROM   ETRE_AVERTI EA, COLLABORATEUR C " +
    	"WHERE  EA.id_prsn = C.id_prsn " +
    	"AND    C.login_col = '" + this.username + "' " +  // Variable d'environnement
    	"AND    EA.averti = 0";
    instruction.executeQuery(requete);
    // Essaye de déplacer le curseur jusqu'au champ de la table
    nb_notifications = instruction.getResultSet().next()?instruction.getResultSet().getInt(1):0;
    if (nb_notifications > 0)
    {
    ...
    Ce qui est en gras me permet de faire fonctionner l'application comme je le souhaite...
    J'en déduis donc qu'il y a un problème de synchronisation des threads ? Une méthode JDBC serait-elle asynchrone et me l'aurait caché ?

    Probablement pas, manque d'expérience JDBC surement...

    Merci de votre lecture et de votre éventuelle réponse

  2. #2
    Membre régulier Avatar de SpecialCharacter
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Points : 72
    Points
    72
    Par défaut
    Si quelqu'un avait un retour d'expérience là dessus ou n'importe quel lien cela m'aiderait...mon projet touche bientôt à son terme et je n'aimerais pas laisser ce genre de bidouille dans mon code.

    Bonne journée

  3. #3
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Et en récupérant directement le resultset ? un peu comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ResultSet resultat=instruction.executeQuery(requete);
    // Essaye de déplacer le curseur jusqu'au champ de la table
    nb_notifications = resultat.next()?resultat.getInt(1):0;
    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Personnellement je ferais quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Connection connection = null;
    PreparedStatement pstmt = null;
    int count = 0;
     
    try
    {
       connection = ...
     
       StringBuilder sb = new StringBuilder();
       sb.append("SELECT COUNT(*) FROM ETRE_AVERTI EA join COLLABORATEUR C");
       sb.append(" on EA.id_prsn = C.id_prsn");
       sb.append(" where C.login_col = ?");
       sb.append(" and EA.averti = 0");
     
       pstmt = connection.prepareStatement(sb.toString());
       pstmt.setString(1, this.username);
       ResultSet rs = pstmt.executeQuery();
       if ( rs.next() )
       {
          count = rs.getInt(1);
       }
       ...
    }
    catch (Exception e)
    {
       ...
    }
    finally
    {
       if ( connection != null ) connection.close();
    }
    Ne pas oublier de libérer la connexion !
    Prend l'habitude d'utiliser les PreparedStatement plutôt que Statement dès lors qu'il y a des paramètres (tu éviteras bien des soucis)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Est-il possible que cela soit dû à la fonction d'aggrégation ? Essaie lui associant un alias puis en faisant un getInt("Nom_alias"), on sait jamais !

Discussions similaires

  1. comportement étrange d'un test
    Par senvedgi dans le forum Débuter
    Réponses: 7
    Dernier message: 23/03/2012, 20h50
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo