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 :

Problème insertion BDD


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut Problème insertion BDD
    Bonjour,

    Je vous demande votre aide car j'ai une application que j'ai crée avec swing connecté à une base de données Postgresql et j'essaye d'inserer des donner dans cette base avec les JTextfield de mon apllication en utilisant un bouton Enregistrer .Je vous donne un bout de mon code pour cette partie et j'espère avoir votre aide svp.

    le code c'est:

    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
    private void EnregistrerClient() {
     
                boutonenregistrer=new JButton();
                boutonenregistrer.addActionListener(this);
     
                String data ="jdbc:odbc:vraiconnexion"; 
                saisieIdclient  = new JTextField(10);
                saisieNom         = new JTextField(10);
                saisiePrenom    = new JTextField(10);
                saisieAdresse     = new JTextField(10);
                saisieTelephone = new JTextField(10);
     
     
                try { 
                String codeclient,nom,prenom,adresse,telephone; 
     
                codeclient=saisieIdclient.getText();
                nom          = saisieNom.getText(); 
                prenom          = saisiePrenom.getText(); 
                adresse         = saisieAdresse.getText(); 
                telephone      =saisieTelephone.getText(); 
                Connection conn = DriverManager.getConnection(data); 
                Statement state = conn.createStatement(); 
                state.executeUpdate("INSERT INTO tabclients VALUES (saisieNom.getText(),saisiePrenom.getText(),saisieAdresse.getText(),saisieTelephone.getText()')");
                state.close(); 
     
                } 
     
                catch(SQLException s){ 
     
                System.out.println("SQL Error:" + s.toString() +" " 
     
                + s.getErrorCode() + " " + s.getSQLState()); 
                }
     
            }
    et pour l'action de bouton c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     else if(e.getSource()==boutonenregistrer)
             {
     
                 EnregistrerClient();
     
             }
    et merci.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Tu exécute ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    state.executeUpdate("INSERT INTO tabclients VALUES (saisieNom.getText(),saisiePrenom.getText(),saisieAdresse.getText(),saisieTelephone.getText()')");
    Essaye de mettre ta requête dans un String et de te l'afficher avant de l'exécuter.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    j'ai essayé votre méthode avec ce code mais ça marche pas et je vois pas le problème .

    le code c'est:

    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
    private void EnregistrerClient() {
     
                boutonenregistrer=new JButton();
                boutonenregistrer.addActionListener(this);
     
     
                saisieIdclient  = new JTextField(10);
                saisieNom         = new JTextField(10);
                saisiePrenom    = new JTextField(10);
                saisieAdresse     = new JTextField(10);
                saisieTelephone = new JTextField(10);
     
     
                try {
     
     
     
     
     
     
                    Connection conn = null;
                    Statement requete1= conn.createStatement();
                    requete1.executeUpdate("INSERT INTO tebclients ('saisieIDclient.getText()','saisieNom.getText()','saisiePrenom.getText()','saisieAdresse.getText()','saisieTelephone.getText()')");
                    String requete = "INSERT INTO tebclients ('saisieIDclient.getText()','saisieNom.getText()','saisiePrenom.getText()','saisieAdresse.getText()','saisieTelephone.getText()'))";
                    requete1.executeUpdate(requete);
                    requete1.close();
     
                } catch (SQLException e) {
     
                    e.printStackTrace();
                }
    }

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut
    Tu as vu ce que donne la requête avant de s'executer??

    essaye avant d'executer ta requête :
    System.out.println(requete);
    En fait il y a 1 problème de concaténation dans ton String...

    Essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String requete = "INSERT INTO tebclients VALUES('"+saisieIDclient.getText()+"','"+saisieNom.getText()+"','"+saisiePrenom.getText()+"','"+saisieAdresse.getText()+"','"+saisieTelephone.getText()+"'))";

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    j'ai essayé ta méthode mais ça marche pas je te donne 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
    23
    24
    25
    26
    27
    28
    29
    30
    private void EnregistrerClient() {
     
                boutonenregistrer=new JButton();
                boutonenregistrer.addActionListener(this);
     
     
                saisieIdclient  = new JTextField(10);
                saisieNom         = new JTextField(10);
                saisiePrenom    = new JTextField(10);
                saisieAdresse     = new JTextField(10);
                saisieTelephone = new JTextField(10);
     
     
                try {
     
     
                    Connection conn = null;
                    Statement requete1= conn.createStatement();
                    requete1.executeUpdate("INSERT INTO tebclients ('saisieIDclient.getText()','saisieNom.getText()','saisiePrenom.getText()','saisieAdresse.getText()','saisieTelephone.getText()')");
                    String requete = "INSERT INTO tebclients ('"+saisieIdclient.getText()+"','"+saisieNom.getText()+"','"+saisiePrenom.getText()+"','"+saisieAdresse.getText()+"','"+saisieTelephone.getText()+"')";
     
                    requete1.executeUpdate(requete);
     
                    requete1.close();
     
                } catch (SQLException e) {
     
                    e.printStackTrace();
                }
    }
    mais je pense que peut j'ai un problème avec mon action performed et le code c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else if(e.getSource()==boutonenregistrer)
             {
     
                 EnregistrerClient();
     
             }

    vous pensez que mon problème viens de l'action performed?Merci.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut
    Quel est le message d'erreur qui est affiché?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    justement pas de message ,là je comprend rien surtout que ma connexion passe

    bien avec Postgresql mais pas de resultat avec ma classe application qui hérite de la classe connect.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Alors j'attend toujours votre aide les amis

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bonjour
    On va faire simple.

    Pour commencer, ta méthode enregistrerClient n'a aucun sens, tu initialise tes JTextFields dedans, donc par définition ces derniers seront vide.

    Cette méthode ne doit contenir que le code d'insertion des données en base, et surtout pas de manipulation de ton interface graphique.

    Puis dans les dernière version de ton code tu ne crées même plus la connexion à la base, tu te contentes d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection conn = null;
    . Il est donc bien évident que tout appel à une méthode de conn te lancera une NullPointerException.

    En ce qui concerne ta requête, beh...
    Par définition le contenu d'une chaine n'est pas du code.
    Donc java ne cherche pas à exécuter le contenu de cette chaine (c'est tout le but d'une chaine d'ailleurs: de stocker des caractères).

    De plus, malgré le fait que tu aies corrigé cela sur les conseils avisés de guillaumerivière7, tu as laissé l'appel suivant dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete1.executeUpdate("INSERT INTO tebclients ('saisieIDclient.getText()','saisieNom.getText()','saisiePrenom.getText()','saisieAdresse.getText()','saisieTelephone.getText()')");
    Ce qui forcément pose problème.

    Donc mettre des appels de méthode dans une chaine comme tu le fais, bah ça ne sert absolument à rien (sauf à rendre ta requête absolument inexécutable par le SGBD).

    Dans ton cas je te conseille très fortement de te diriger vers les PreparedStatement qui sont la façon propre de faire

    Dans ton cas:

    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
    Connection conn = null
    PreparedStatement stmt = null;
     
    String data ="jdbc:odbc:vraiconnexion"; 
     
    try {
        conn = DriverManager.getConnection(data); 
        stmt= conn.prepareStatement("INSERT INTO tebclients (ID,NOM,PRENOM,ADRESSE,TELEPHONE) VALUES (?,?,?,?,?)");
        stmt.setString(1,saisieIdclient.getText());
        stmt.setString(2,saisieNom.getText());
        stmt.setString(3,saisiePrenom.getText());
        stmt.setString(4,saisieAdresse.getText());
        stmt.setString(5,saisieTelephone.getText());
        stmt.executeUpdate();                    
    } catch (SQLException e) {    
        e.printStackTrace();
    } finally {
        try {
            if( stmt != null ) {
                stmt.close();
            }
            if( conn != null ) {
                conn.close();
            }
        } catch (SQLException e) {    
            e.printStackTrace();
        }
    }
    Tout le code concernant ton interface graphique devrait être exécuté dans le constructeur de ta classe, cela suffira amplement.
    A noter la clause finally utilisée pour être sûr que le statement et la connexion seront fermés correctement, que l'insertion aie réussi ou non.

    Donc bref, je te conseille


    1. De relire tes cours de base de java avant de foncer tête baissée dans ton code. Définitivement il y a des notions que tu n'as pas acquis, notions qui sont un tant soit eu nécessaires quand on commence à toucher aux API avancées (genre Swing, JDBC et compagnie)
    2. De prendre le temps de réfléchir un peu, voir de poser un petit dessin sur papier des divers éléments sur ton papier, car là tu es totalement en train de t'embrouiller.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Merci pour tes conseils Sinok mais je dois pas faire une méthode pour l'action de mon bouton enregistrer?.je te donne mon nouveau code et j'espère trouver une solution car j'avance pas.

    mon nouveau code c'est:

    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
    37
    38
    39
    private void EnregistrerClient() throws ClassNotFoundException {
    			boutonenregistrer=new JButton();
    			boutonenregistrer.addActionListener(this);
    			Connection conn = null;
    			PreparedStatement stmt = null;
     
    			String data ="jdbc:odbc:vraiconnexion"; 
    			Class.forName("org.postgresql.Driver");
    			System.out.println("DRIVER OK ! ");
     
    			String url = "jdbc:postgresql://localhost:5433/tabclient";
    			String user = "postgres";
    			String passwd = "anissa39";
    			try {
     
     
    			    conn = DriverManager.getConnection(data); 
    			    stmt= conn.prepareStatement("INSERT INTO tebclients (ID,NOM,PRENOM,ADRESSE,TELEPHONE) VALUES (?,?,?,?,?)");
    			    stmt.setString(1,saisieIdclient.getText());
    			    stmt.setString(2,saisieNom.getText());
    			    stmt.setString(3,saisiePrenom.getText());
    			    stmt.setString(4,saisieAdresse.getText());
    			    stmt.setString(5,saisieTelephone.getText());
    			    stmt.executeUpdate();                    
    			} catch (SQLException e) {    
    			    e.printStackTrace();
    			} finally {
    			    try {
    			        if( stmt != null ) {
    			            stmt.close();
    			        }
    			        if( conn != null ) {
    			            conn.close();
    			        }
    			    } catch (SQLException e) {    
    			        e.printStackTrace();
    			    }
    			}
    		}
    Merci.

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Même règle que pour les JTextFields, direction le constructeur.

    En effet, pour que la méthode EnregistrerClient soit appelée, il faut que le listener soit déjà enregistré sur ton bouton. De fait l'ajout du listener au bouton (qui nécessite que le JButton soit initialisé bien sûr) doit être fait avant l'appel de la méthode EnregistrerClient.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Même règle que pour les JTextFields, direction le constructeur.

    En effet, pour que la méthode EnregistrerClient soit appelée, il faut que le listener soit déjà enregistré sur ton bouton. De fait l'ajout du listener au bouton (qui nécessite que le JButton soit initialisé bien sûr) doit être fait avant l'appel de la méthode EnregistrerClient.

    Un peu de logique que diantre...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    j'ai mis un action listener pour mon bouton enregistrer avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class BoutonListener implements ActionListener{
     
                public void actionPerformed(ActionEvent e) {
     
                        System.out.println("nom : "  + saisieNom.getText());
                        //System.out.println("TEXT : nom " + saisieNom.getText());
                        //System.out.println("TEXT : prenom "  + saisiePrenom.getText());
                        //System.out.println("TEXT : adresse "  + saisieAdresse.getText());
                        //System.out.println("TEXT : telephone "  + saisieTelephone.getText());
                }
    et j'ai changé mon code qui est le suivant:

    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
    37
    38
    private void EnregistrerClient()   {
     
     
                PreparedStatement statement;
                Connection conn=null;
                try {
                    Class.forName("org.postgresql.Driver");
     
                System.out.println("DRIVER OK ! ");
     
                String url = "jdbc:postgresql://localhost:5433/tabclient";
                String user = "postgres";
                String passwd = "anissa39";
     
                Connection    conn1 = DriverManager.getConnection(url, user, passwd);
     
     
     
     
     
     
                   String requete= "INSERT INTO tebclients (ID,NOM,PRENOM,ADRESSE,TELEPHONE) VALUES (?,?,?,?,?)";
     
                       statement=conn.prepareStatement(requete);
                    statement.setString(1,saisieIdclient.getText());
                    statement.setString(2,saisieNom.getText());
                    statement.setString(3,saisiePrenom.getText());
                    statement.setString(4,saisieAdresse.getText());
                    statement.setString(5,saisieTelephone.getText());
                    statement.executeUpdate();                    
                } catch (SQLException e) {    
                    e.printStackTrace();
     
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    mais j'ai une exception de java.lang.NullPointerException et je vois pas la solution .une piste s'il vous plait.

  14. #14
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Dans quelle classe et à quelle ligne ?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Dans la classe application ligne 151 qui corresspond à ce code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enregistrerInformationClient.addActionListener(new BoutonListener());
    Sinon j'ai une seule classe avec la classe connect ,je dois peut être créer une classe insertion pour me faciliter la tâche .vous en pensez quoi pour ma méthode de travail?

  16. #16
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    ton JButton enregistrerInformationClient n'a pas été initialisé. Grosso modo la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enregistrerInformationClient = new Jbutton("Enregistrer");
    n'a jamais été exécutée.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. Problème Insertion BDD SQL Server
    Par drake56 dans le forum C#
    Réponses: 13
    Dernier message: 19/07/2011, 11h20
  2. Problème insertion BDD Oracle
    Par james23 dans le forum Débuter
    Réponses: 26
    Dernier message: 04/08/2010, 16h32
  3. problème insertion bdd
    Par hugo7 dans le forum VB.NET
    Réponses: 19
    Dernier message: 07/10/2009, 10h13
  4. [MySQL] Problème insertion bdd -> accent
    Par piero53 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/06/2009, 00h33
  5. Problème Insert dans bdd Access
    Par waterman dans le forum Windows Forms
    Réponses: 10
    Dernier message: 10/04/2007, 17h15

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