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 :

Requête SQL ne veut pas passer depuis Java vers Mysql


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Requête SQL ne veut pas passer depuis Java vers Mysql
    Bonjour à vous. Je voudrai exécuter des requêtes depuis une application Java vers Mysql (Wamp server).

    Pour cela, j'ai téléchargé le fichier Jar de Mysql que j'ai ajouté dans mon application, puis j'ai copié ce Jar dans le dossier java\bin enfin j'ai créé la variable d'environnement qui référence le chemin où j'ai copié ce Jar. Mais quand j'exécute le code, j'ai l'erreur suivante :


    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Erreur de syntaxe près de 'INSERT INTO conjoint ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP,' à la ligne 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2480)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2438)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)

    Est ce que quelqu'un peut m'aider s'il vous plait

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Erreur de syntaxe près de 'INSERT INTO conjoint ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP,' à la ligne 1
    Sans le code qui génère cette requête, difficile de vous répondre.
    Et la question concernera, à mon avis, davantage le forum Java que le forum MySQL mais attendons de voir la requête quand même...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 377
    Points : 19 049
    Points
    19 049
    Par défaut
    Salut à tous.

    En ce qui concerne Java, non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Erreur de syntaxe près de 'INSERT INTO conjoint ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP,' à la ligne 1
    Sans la requête, telle que vous l'avez écrite, il nous est difficile de répondre à votre question.

    Voir la syntaxe de l'insert : https://dev.mysql.com/doc/refman/5.7/en/insert.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Désolé de ne pas avoir posté le code de la requête. Le voici :
    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
    40
    41
    42
    43
     
               Connection con = null; 
               Statement st = null;
               ResultSet rs = null;
     
               try{
                   Class.forName("com.mysql.jdbc.Driver");
                   }catch(ClassNotFoundException cnfe){ 
                   System.out.println("La classe com.mysql.jdbc.Driver n'a pas été trouvée"); 
                   cnfe.printStackTrace();} 
     
               try {
                   con=DriverManager.getConnection("jdbc:mysql://localhost:3306/db?useSSL=false","root","");
                   st = con.createStatement();
                   String rq = ("INSERT INTO 'conjoint' ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule_Conjoint ) VALUES ('"+Matricule+"', '"+Nom_Conjoint+"', '"+Prenom_Conjoint+"', '"+Matricule_Conjoint+"');");
     
                   st.executeUpdate(rq);
                   System.out.println("Insertion du conjoint réussite !!!!");
                } catch ( Exception ex ) { ex.printStackTrace(); }
            finally{
                        if(rs != null) 
                           {
                                System.out.println("Fermeture de l'objet ResultSet.");
                                try{ 
                                      rs.close(); }
                                catch ( SQLException ignore ) 
                                { System.out.println("Resultset ne peut pas être ignoré."); }
                           }
                        if(st != null) 
                           {
                                System.out.println("Fermeture de l'objet Statement.");
                                try { 
                                       st.close(); } 
                                catch ( SQLException ignore ) {  }
                           }
                        if(con != null) 
                           {
                               try{ System.out.println( "Fermeture de l'objet Connection." );
     
                                    con.close(); } 
                               catch ( SQLException ignore ) { }
                           }
                   }

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    A priori, la requête semble correcte.
    Reste à savoir si Matricule, Nom_Conjoint, Prenom_Conjoint, Matricule_Conjoint sont valorisés.

    Mais...
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    String rq = ("INSERT
    Une variable String qui commence par une parenthèse, c'est pas un peu bizarre ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse CinéPhile c'était bel et bien l'une des erreurs. Après correction ça me donne l'erreur suivante :

    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
    40
    41
    Le serveur a reçu Matricule= et  Nom_Conjoint= et  Prenom_Conjoint= et  Matricule_Conjoint=
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Erreur de syntaxe près de ''conjoint' ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule' à la ligne 1
    Fermeture de l'objet Statement.
    Fermeture de l'objet Connection.
    Fermeture de l'objet Statement.
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    Fermeture de l'objet Connection.
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    	at com.mysql.jdbc.Util.getInstance(Util.java:408)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2480)
    	at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
    	at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480)
    	at bcp_server.Requettes_Sql_Insertion_BD.Ajout_Conjoint(Requettes_Sql_Insertion_BD.java:46)
    	at bcp_server.ServerThread.run(ServerThread.java:53)
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Erreur de syntaxe près de ''conjoint' ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule' à la ligne 1
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    	at com.mysql.jdbc.Util.getInstance(Util.java:408)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2480)
    	at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
    	at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480)
    	at bcp_server.Requettes_Sql_Insertion_BD.Ajout_Conjoint(Requettes_Sql_Insertion_BD.java:46)
    	at bcp_server.ServerThread.run(ServerThread.java:53)
    En faite, je travail sur un architecture Client/Serveur où ce Client communique des données avec le Serveur à travers un Socket, ensuite le Serveur doit faire des traitements avec la base de données Mysql installée sur le serveur lui même.

    Voici le code qui me permet d'exécuter la requête depuis le serveur avec les paramètres données comme paramètres:
    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
    40
    41
    42
    43
    44
    public static void Ajout_Conjoint(String Matricule, String Nom_Conjoint, String Prenom_Conjoint, String Matricule_Conjoint){                       
               Connection con = null; 
               Statement st = null;
               ResultSet rs = null;
     
               try{
                   Class.forName("com.mysql.jdbc.Driver");
                   }catch(ClassNotFoundException cnfe){ 
                   System.out.println("La classe com.mysql.jdbc.Driver n'a pas été trouvée"); 
                   cnfe.printStackTrace();} 
     
               try {
                   con=DriverManager.getConnection("jdbc:mysql://localhost:3306/db?useSSL=false","root","");
                   st = con.createStatement();
                   String rq = "INSERT INTO 'conjoint' ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule_Conjoint ) VALUES ('"+Matricule+"', '"+Nom_Conjoint+"', '"+Prenom_Conjoint+"', '"+Matricule_Conjoint+"');";
                   //rs = st.executeUpdate("INSERT INTO 'conjoint' ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule_Conjoint ) VALUES ('"+Matricule+"', '"+Nom_Conjoint+"', '"+Prenom_Conjoint+"', '"+Matricule_Conjoint+"');");         
                   st.executeUpdate(rq);
                   System.out.println("Insertion du conjoint réussite !!!!");
                } catch ( Exception ex ) { ex.printStackTrace(); }
            finally{
                        if(rs != null) 
                           {
                                System.out.println("Fermeture de l'objet ResultSet.");
                                try{ 
                                      rs.close(); }
                                catch ( SQLException ignore ) 
                                { System.out.println("Resultset ne peut pas être ignoré."); }
                           }
                        if(st != null) 
                           {
                                System.out.println("Fermeture de l'objet Statement.");
                                try { 
                                       st.close(); } 
                                catch ( SQLException ignore ) {  }
                           }
                        if(con != null) 
                           {
                               try{ System.out.println( "Fermeture de l'objet Connection." );
     
                                    con.close(); } 
                               catch ( SQLException ignore ) { }
                           }
                   }
        }
    et voici comment j'appelle cette fonction dans le main en faisant un petit teste sur le premier champs envoyé depuis le client vers le serveur qui me permet de décider quelle requête utiliser :
    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
    public class ServerThread extends Thread{
        String message=null;
        Socket socket;
    //---- Attributs relatives au Conjoint----//    
        private String Matricule;
        private String Nom_Conjoint;
        private String Prenom_Conjoint;
        private int TravailBP;
        private String Matricule_Conjoint;
            public void run(){
            try{
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));              
                    while((message = bufferedReader.readLine()) != null)
                        {
                            System.out.println("Incoming Client message: "+ message);
        //--------------CODE FONCTIONEL POUR DECOUPER LE MESSAGE ENVOYE PAR LE CLIENT----------------------------//                    
                            String Parts[] = message.split(",");
                            System.out.println("Je suis Parts[0]"+Parts[0]);
                            if(":1".equals(Parts[0]))  //Teste sur quelle requête utiliser
                                {
                                    for(int i = 0; i < Parts.length; i++)   // Boucle pour récupérer les variables envoyés depuis le client
                                        { System.out.println("---->"+Parts[i]); 
                                          Matricule = Parts[1];
                                          Nom_Conjoint = Parts[2];
                                          Prenom_Conjoint = Parts[3];
                                          Matricule_Conjoint = Parts[4];
     
                                          //System.out.println("La vérification de la "+i+"éme ligne s'est exécutée !!!!!");                                     
                                        }
                                    System.out.println("Le serveur a reçu"+ Matricule+" et "+Nom_Conjoint+" et "+Prenom_Conjoint+" et "+Matricule_Conjoint);
     
                                    Requettes_Sql_Insertion_BD.Ajout_Conjoint(this.Matricule=Matricule, this.Nom_Conjoint=Nom_Conjoint, this.Prenom_Conjoint=Prenom_Conjoint, this.Matricule_Conjoint=Matricule_Conjoint);
                                }                           
                        }
                    //socket.close();
            }catch (IOException e){e.printStackTrace();}
        }
    Je ne sais vraiment plus ou donner ma tête

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String rq = "INSERT INTO 'conjoint'
    Retirez les apostrophes autour du nom de la table !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'ai corrigé l'erreur que vous m'avez cité.
    Désormais, il me lance l'erreur suivante :

    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
    Fermeture de l'objet Statement.
    Fermeture de l'objet Connection.
    com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`db`.`conjoint`, CONSTRAINT `FK_Conjoint_Agent` FOREIGN KEY (`Matricule`) REFERENCES `agent` (`Matricule`) ON DELETE CASCADE ON UPDATE CASCADE)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    	at com.mysql.jdbc.Util.getInstance(Util.java:408)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2480)
    	at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
    	at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480)
    	at bcp_server.Requettes_Sql_Insertion_BD.Ajout_Conjoint(Requettes_Sql_Insertion_BD.java:46)
    	at bcp_server.ServerThread.run(ServerThread.java:51)
    J'avais un doute sur le faite que les paramètres de la fonction contenant la requête ne remplissent pas leur travail, mais j'ai eu tord car quand je remplace cette requête par une autre sans paramètres j'ai le même problème

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Cannot add or update a child row: a foreign key constraint fails (`db`.`conjoint`, CONSTRAINT `FK_Conjoint_Agent` FOREIGN KEY (`Matricule`) REFERENCES `agent` (`Matricule`) ON DELETE CASCADE ON UPDATE CASCADE)
    Ça veut dire que l'insertion viole la contrainte de clé étrangère. Il semble que le Matricule que vous essayez d'insérer n'existe pas dans la table agent.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Pas du tout. Voici les deux tables concernées reliées par la clé Matricule:

    Agent ( Matricule, Nom, Prenom, Date_Naissance, Date_Entree, Sexe, Situation_Familiale, Grade_Hierarchique, Indice_De_Base, Classe) ;
    Conjoint ( Id_Conjoint, Matricule_Conjoint, Nom_Conjoint , Prenom_Conjoint, Travail_Sur_BP, #Matricule ) ;

    Je présume que je pourrais avoir un problème dans les versions: du pont jdbc, de java et de mysql en seréférant à ce lien : https://dev.mysql.com/doc/connector-...-versions.html. C'est pour ça que j'ai téléchargé la version 1.8 de java que j'ai replacé dans Netbeans (logiciel avec lequel je développe) car j'avait Java 1.7, mais j'ai toujours le même message d'erreur.

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je ne parlais pas du nom de la colonne mais de la valeur insérée.

    Si le matricule que vous essayez d'insérer dans la table conjoint est, par exemple, le 'MAT123' et que cette valeur n'existe pas dans la colonne Matricule de la table agent, ça déclenche l'erreur que vous avez eue.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Cela ne se produit pas dans mon cas car les deux matricules ne sont pas des clés. Voici les deux tables reliées que concerne cette insertion :

    Agent ( Matricule, Nom, Prenom, Date_Naissance, Date_Entree, Sexe, Situation_Familiale, Grade_Hierarchique, Indice_De_Base, Classe ) ;
    Conjoint ( Id_Conjoint, Matricule_Conjoint, Nom_Conjoint , Prenom_Conjoint, Travail_Sur_BP, #Matricule ) ;

    Après etre tombé sur ce site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html
    , je pensais que j'avais un problème de compatibilité entre les versions de Mysql, du pont JDBC entre l'application et Mysql ainsi que de la version Java sur laquelle tourne Netbeans. C'est pour ça que j'ai téléchargé la version 1.8 (nommée 8) de java que j'ai changé pour Netbeans, mais cela ne m'a donné aucun résultat.

  13. #13
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Cela ne se produit pas dans mon cas car les deux matricules ne sont pas des clés.
    Ben pourtant, vous avez bel et bien une clé étrangère, dixit le message d'erreur qui vous a été retourné par MySQL :
    Cannot add or update a child row: a foreign key constraint fails (`db`.`conjoint`,CONSTRAINT `FK_Conjoint_Agent` FOREIGN KEY (`Matricule`) REFERENCES `agent` (`Matricule`) ON DELETE CASCADE ON UPDATE CASCADE)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Désolé pour ce mal entendu. Je suis d'accord avec toi parce que je n'est pas précisé que pour palier à ce problème de clé étrangére, j'ai fixé "Matricule de l'agent" qui est égale à "Matricule" dans le JTextField lui même pour ce pas avoir à ressaisir le code milles fois :
    Nom : Sans titre.png
Affichages : 1424
Taille : 8,6 Ko

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je ne fais qu'expliquer le message d'erreur que vous recevez afin de vous aider à trouver sa cause dans votre programme.
    JTextField n'est pas du MySQL !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le message d'erreur dit en gros que le matricule que t'essaie d'insérer n'existe pas dans la table agent. Point. Tu dois insérer un matricule qui existe dans la table agent et ce n'est clairement pas le cas vu le message d'erreur. Ce n'est aussi clairement pas le cas vu l'output de ta console qui dit par exemple que ton Matricule est, je cite "Matricule=". Je doute que ce soit un matricule correct.



    Ensuite quelques remarques sur le code tant qu'on y est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                   st = con.createStatement();
                   String rq = ("INSERT INTO 'conjoint' ( Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule_Conjoint ) VALUES ('"+Matricule+"', '"+Nom_Conjoint+"', '"+Prenom_Conjoint+"', '"+Matricule_Conjoint+"');");
     
                   st.executeUpdate(rq);
    Ca, c'est du caca. On construit pas une requête par concaténation en 2017. On n'est plus dans les années 90 où tout le monde était beau et personne ne faisait d'injection SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                   PreparedStatement st = con.prepareStatement("INSERT INTO conjoint (Matricule, Nom_Conjoint, Prenom_Conjoint, Travail_Sur_BP, Matricule_Conjoint ) VALUES (?,?,?,?,?)";
                              st.setString(1,Matricule);
                              st.setString(2,Nom_Conjoint);
                              st.setString(3,Prenom_Conjoint);
                              st.setString(4, ??????);
                              st.setString(5,Matricule_Conjoint);
                   st.executeUpdate();
    En plus d'éviter le bordel des échappements de guillemets, ça rend la requête lisible, ça permet de typer les paramètres et on voit tout de suite que t'as oublié la colonne Travail_Sur_BP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                                    for(int i = 0; i < Parts.length; i++)   // Boucle pour récupérer les variables envoyés depuis le client
                                        { System.out.println("---->"+Parts[i]); 
                                          Matricule = Parts[1];
                                          Nom_Conjoint = Parts[2];
                                          Prenom_Conjoint = Parts[3];
                                          Matricule_Conjoint = Parts[4];
     
                                          //System.out.println("La vérification de la "+i+"éme ligne s'est exécutée !!!!!");                                     
                                        }
    Pourquoi diable?
    1) assigner les valeurs dans une boucle alors qu'elles ne dépendent pas de i? (C'est du travail inutile)
    2) assigner des données qui correspondent à la ligne lue à des attributs? Ca devrait être des variables locale.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                                    Requettes_Sql_Insertion_BD.Ajout_Conjoint(this.Matricule=Matricule, this.Nom_Conjoint=Nom_Conjoint, this.Prenom_Conjoint=Prenom_Conjoint, this.Matricule_Conjoint=Matricule_Conjoint);
    Tu assigne les valeurs à elle même, ce code est strictement le même que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                                    Requettes_Sql_Insertion_BD.Ajout_Conjoint(Matricule, Nom_Conjoint,Prenom_Conjoint, Matricule_Conjoint);
    ou que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                                    Requettes_Sql_Insertion_BD.Ajout_Conjoint(this.Matricule, this.Nom_Conjoint, this.Prenom_Conjoint, this.Matricule_Conjoin);

    En java, les conventions de nommage, c'est le lowerCamelCase (une minuscule au début une majuscule au début de chaque mot), pas le Upper_Snake_Case. Et pour les classes, c'est le UpperCamelCase. Je te conseille vivement de respecter ces conventions si tu veux garder un code lisible. En lisant ton code actuel on peine à voir ce qui est local, ce qui est classe, ce qui est méthodes.


    Donc pour résumer:

    il manque des colonnes dans ta requete,
    ton serveur et le truc qui envoie les données ne parlent visiblement pas la même langue, le serveur reçois n'importe quoi
    le serveur essaie d'envoyer le n'importe quoi sans rien vérifier à la base de donnée.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Faculté des Sciences et Téchniques
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Faculté des Sciences et Téchniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Un minimum de politesse de votre part n'aurai fait de mal à personne , spécialement puisque vous êtes "Expert éminent senior" dans ce forum.

    Et je n'étais pas programmeur "dans les années 90" comme vous l'étier vous peut être . Je ne me rend sur se Forum que quand je bloque pendant une longue période sur un problème que je ne sais pas résoudre.

    En ce qui concerne la prise d'écran concernant "Matricule=", c'est juste un System.out.println que j'avais mis dans mon code et qui n'est plus exploité car j'ai changé le nom de mon textfield ou je récupère la matricule.

    Ensuite vient le "travail_Sur_BP" que je ne n’insère pas dans la requête car la fonction isSelected(); qui devrait me donner false ou true pour les checkbox; me rend une erreur. D'ailleurs dans ma base de données ce n'est pas obligatoire d'insérer tous les champs dans une table à part les clés primaires (et c'est déjà testé dans l'interface de code Mysql).

    Après, l'assignement des variables dans une boucle est là pour récupérer chaque champ passé du client, l'encapsuler dans un String ou dans un objet puis l'envoyer sur le réseau vers le serveur (NB: Cette ligne "String Parts[] = message.split(",");" permet de dissocier le String envoyé du client en champs séparés ). La boucle qui se trouve chez le serveur sert à lire ce String, c'est par ça qu'il y a les séparateurs qui servent à délimiter les champs envoyés.

    J'avoue que l'assignement des variables à elles mêmes n'a pas de sens dans l'appel de la fonction qui exécute la requête. je me suis rendu compte en changeant les noms de ces paramètres entre la 1ére classe et la seconde, car cette même fonction présente dans la première Classe avait des variables locales qui ont les mêmes noms que dans l'autre classe ou je les appelle. c'est pour ça que j'ai mis le "this" qui me permet d'assigner les valeurs de la fonction aux paramètres de la classe.

    Enfin, le langage parlé entre mon client et mon serveur est le String qui s'envoi et qui est lu par le serveur. Et le serveur n'envoie rien au client, c'est le contraire qui se produit. Sinon si tu a une autre théorie concernant la communication entre le client et le serveur à part les Sockets, Threads et Sérialisation je serai preneur.

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

Discussions similaires

  1. [PDO] Une requête SQL ne veut pas s'exécuter
    Par Francky44003 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/11/2012, 11h55
  2. Réponses: 2
    Dernier message: 25/08/2010, 17h50
  3. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29
  4. requetes qui ne veut pas passer
    Par suya95 dans le forum Requêtes
    Réponses: 14
    Dernier message: 04/07/2006, 14h17

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