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 :

Comment vérifier mes données avant de faire un UPDATE


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 53
    Points
    53
    Par défaut Comment vérifier mes données avant de faire un UPDATE
    Bonjour,

    Pour débiter mon compte j'arrive à prendre le numéro de compte et aussi à faire la soustraction à la base de données mais je dois faire quelques contrôles d'abord : comme vérifier si le compte existe et aussi que le montant saisi ne soit pas supérieur à celui déjà dans le compte. Je n'arrive pas à comprendre comment faire.

    Merci d'avance

    Nom : Capture d'écran 2015-07-21 12.18.28.png
Affichages : 283
Taille : 133,1 Ko
    voici le code:
    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
     
     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
     
            String cpte = jTcmpte.getText();
            int solde = Integer.parseInt(jTsolde.getText());
     
            String myquery = " UPDATE comptes SET solde = ? - solde WHERE NumCompte = ?";
             try (PreparedStatement ps = conn.prepareStatement(myquery))
                     {
                     ps.setInt(1, solde);
                     ps.setString(2, cpte);
     
                     int ligneAjoutee = ps.executeUpdate();
                     JOptionPane.showMessageDialog(null, "ouverture de compte reussie" );
     
                    }
              catch (SQLException ex) {
                ex.printStackTrace();
            }
     
        }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord, il y a une erreur dans ton UPDATE : UPDATE comptes SET solde = ? - solde WHERE NumCompte = ?
    Normalement, ça devrait être : UPDATE comptes SET solde = solde - ? WHERE NumCompte = ?
    Sinon, si tu as 100 dans le compte et que tu débites 20, tu obtiendras 20 - 100 = -80.

    Pour pouvoir faire la vérification que tu veux, il te suffit de faire un SELECT avant l'UPDATE : SELECT solde FROM comptes WHERE NumCompte = ?.
    Si le ResultSet ne contient pas d'enregistrement, c'est que le compte n'existe pas. S'il contient un enregistrement, tu peux faire l'UPDATE (éventuellement, tu peux récupérer le solde actuel pour l'afficher).

    Ensuite, tu modifies l'UPDATE, comme çà : UPDATE comptes SET solde = solde - ? WHERE NumCompte = ? AND solde > ?. Il faudra bien sûr ajouter la valeur du troisième paramètre, qui est égale à celle du premier. Comme la méthode executeUpdate retourne le nombre de lignes modifiées, si c'est 0, tu sauras si la modification a pu être faite ou pas, donc si le solde était suffisant. Ça fonctionne même en multi-utilisateur.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 53
    Points
    53
    Par défaut ok
    mais s'il vous plait pouvez vous essayer de le mettre dans mon code pour que je puisse bien comprendre?
    merci

  4. #4
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 53
    Points
    53
    Par défaut voici le nouveau code que j'ai fais
    dans la condition if () qu'est ce que je dois mettre au juste ? et aussi il me demande de mettre la clause catch qui existe deja dans le code
    s'il vous plait c'est mon premier application j'ai besoin de vous pour comprendre les differents points je vous remerci
    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
    33
    34
    35
    36
     
      String cpte = jTcmpte.getText();
            int solde = Integer.parseInt(jTsolde.getText());
     
            String myquery = " SELECT solde FROM comptes WHERE NumCompte = ?";
             try (PreparedStatement ps = conn.prepareStatement(myquery))
                     {
                     ps.setString(2, cpte);
     
    // ici executer la requete et voir si elle retourne quelque chose
    if (myquery)
    {
    String mareq = " UPDATE comptes SET solde =  solde -? WHERE NumCompte = ?";
    try (PreparedStatement ik =conn.prepareStatement(mareq))
    {
    ik.setInt(1, solde);
    ik.setString(2, cpte);
     
    int ligneAjoutee = ik.executeUpdate();
    JOptionPane.showMessageDialog(null, "ouverture de compte reussie" );
     
    }
    catch (SQLException ex) 
     {
      ex.printStackTrace();
     }
    }
     
    else
             {
    // ici affciher les messages compte inexistant
                     JOptionPane.showMessageDialog(null, "veuillez verifier votre numero de compte ce numero n'est pas valide");
     
     
     
        }

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String myquery = " SELECT solde FROM comptes WHERE NumCompte = ?";
             try (PreparedStatement ps = conn.prepareStatement(myquery))
                     {
                     ps.setString(2, cpte);
    Il n'y qu'un seul paramètre dans ton SELECT (au passage, enlève l'espace au début de la chaine) : donc c'est ps.setString(1,cpte).

    Ensuite, il faut exécuter ce prepareStatement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResultSet resultSet = ps.executeQuery();
    La méthode next() de resultSet permet de lire les enregistrements s'il y en a, un par un, à chaque appel de next. Elle retourne true ou false selon qu'on obtienne ou pas un nouvel enregistrement.

    Donc il suffit de faire : if ( rs.next() ) pour tester s'il y a bien un compte retrouvé par la SELECT.

    Ou tu peux faire comme ça :

    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
    33
    34
    35
     
    boolean compteexiste=false;
    String cpte = jTcmpte.getText();
    int solde = Integer.parseInt(jTsolde.getText());
     
    String myquery = "SELECT solde FROM comptes WHERE NumCompte = ?";
    try (PreparedStatement ps = conn.prepareStatement(myquery)) {
       ps.setString(1, cpte);
       ResultSet rs = ps.executeQuery();
       compteexiste = rs.next();
    } catch (SQLException ex)  {
      ex.printStackTrace();
    }
    // ici executer la requete et voir si elle retourne quelque chose
    if (compteexiste) {
       String mareq = "UPDATE comptes SET solde =  solde -? WHERE NumCompte = ? & solde>= ?";
       try (PreparedStatement ik =conn.prepareStatement(mareq)) {
          ik.setInt(1, solde);
          ik.setString(2, cpte);
          ik.setString(1, solde);
     
          int ligneModifie = ik.executeUpdate();
          if ( ligneModifie==0 ) {
               JOptionPane.showMessageDialog(null, "solde insuffisant" );
          } else {
               JOptionPane.showMessageDialog(null, "ouverture de compte reussie" );
          }
       } catch (SQLException ex) {
           ex.printStackTrace();
       }
    }
    else {
    // ici affciher les messages compte inexistant
                     JOptionPane.showMessageDialog(null, "veuillez verifier votre numero de compte ce numero n'est pas valide");
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 53
    Points
    53
    Par défaut controle de compte reussi
    mais si on met le montant voila le message d'erreur que ça affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    java.sql.SQLException: No value specified for parameter 3
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'ai fait un copier-coller un peu rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ik.setInt(1, solde);
          ik.setString(2, cpte);
          ik.setString(1, solde);
    Dans la troisième ligne il fallait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ik.setInt(1, solde);
          ik.setString(2, cpte);
          ik.setString(3, solde);
    C'est ce que te dit le message d'erreur : il manque le paramètre 3
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 53
    Points
    53
    Par défaut après modification
    il met cette erreur est ce une erreur dans la base de données vu que je vois truncate et aussi le 3e paramètre ne prend pas String il accepte le setInt chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'kadi7e'
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4118)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Au temps pour moi (suis fatigué moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ik.setInt(1, solde);
          ik.setString(2, cpte);
          ik.setInt(3, solde);
    Bien sûr le solde est un int. Ça m'étonne que tu aies pu compiler.

    Il y a une erreur aussi dans l'UPDATE : "UPDATE comptes SET solde = solde -? WHERE NumCompte = ? & solde>= ?";. A la place du &, mettre AND :
    "UPDATE comptes SET solde = solde -? WHERE NumCompte = ? AND solde>= ?";Je remets le code complet corrigé :

    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
    33
    34
    35
     
    boolean compteexiste=false;
    String cpte = jTcmpte.getText();
    int solde = Integer.parseInt(jTsolde.getText());
     
    String myquery = "SELECT solde FROM comptes WHERE NumCompte = ?";
    try (PreparedStatement ps = conn.prepareStatement(myquery)) {
       ps.setString(1, cpte);
       ResultSet rs = ps.executeQuery();
       compteexiste = rs.next();
    } catch (SQLException ex)  {
      ex.printStackTrace();
    }
    // ici executer la requete et voir si elle retourne quelque chose
    if (compteexiste) {
       String mareq = "UPDATE comptes SET solde =  solde -? WHERE NumCompte = ? AND solde>= ?";
       try (PreparedStatement ik =conn.prepareStatement(mareq)) {
          ik.setInt(1, solde);
          ik.setString(2, cpte);
          ik.setInt(3, solde);
     
          int ligneModifie = ik.executeUpdate();
          if ( ligneModifie==0 ) {
               JOptionPane.showMessageDialog(null, "solde insuffisant" );
          } else {
               JOptionPane.showMessageDialog(null, "ouverture de compte reussie" );
          }
       } catch (SQLException ex) {
           ex.printStackTrace();
       }
    }
    else {
    // ici affciher les messages compte inexistant
                     JOptionPane.showMessageDialog(null, "veuillez verifier votre numero de compte ce numero n'est pas valide");
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 53
    Points
    53
    Par défaut merci beaucoup
    grace a vous je peux respirer maintenant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bonjour petit débutan a besoin d'aide pour page d'accueil
    Par Gray Man dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 09/12/2005, 17h33

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