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 :

Cannot add or update a child row: a foreign key constraint fails


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Cannot add or update a child row: a foreign key constraint fails
    bonjour ,

    J'ai un petit soucis avec cette erreur ( Cannot add or update a child row: a foreign key constraint fails (`g_salarie`.`dossier`, CONSTRAINT `FK_dossie ) au niveau de l'inserction je sais pas que je dois faire , sil vs plait quelqu'un peut m'aider a résoudre le problème.
    merci d'avance
    voici Voici mes requêtes d'insertion a la base de données ;
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     a=stmt.executeUpdate("insert into dossier values ('"+z+"','"+dt_naiss+"','"+this.lieu_naiss.getText()+"','"+Integer.parseInt(this.tele.getText())+"','"+this.adr.getText()+"','"+this.situa_fam.getSelectedItem()+"','"+Integer.parseInt(this.nbr_enf.getText())+"','"+Integer.parseInt(this.mat.getText())+"')");
    a2=stmt.executeUpdate("insert into perssonel values('"+Integer.parseInt(this.mat.getText())+"','"+this.cin.getText()+"','"+this.Nom_txt.getText()+"','"+this.pr.getText()+"','"+dt_rec+"','"+1+"','"+this.cmr.getText()+"','"+z+"','"+Integer.parseInt(this.code_bnq.getText())+"','"+Integer.parseInt(this.code_mut.getText())+"','"+x+"')");
    Ainsi mes requêtes de création de table
    Code sql : 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
     
    CREATE TABLE dossier(
            id_dossier    int (11) Auto_increment  NOT NULL ,
            date_naiss    Date NOT NULL ,
            lieu_naiss    Varchar (30) NOT NULL ,
            tele          Int NOT NULL ,
            addresse      Varchar (40) NOT NULL ,
            situation_fam Varchar (20) NOT NULL ,
            nbr_enfant    Int NOT NULL ,
            matricule     Int NOT NULL ,
            PRIMARY KEY (id_dossier )
     
    // -----
    CREATE TABLE perssonel(
            matricule     Int NOT NULL ,
            CIN_per       Varchar (20) NOT NULL ,
            nom_per       Varchar (30) NOT NULL ,
            prenom_per    Varchar (30) NOT NULL ,
            date_rec      Date NOT NULL ,
            CMR           Int NOT NULL ,
            id_dossier    Int NOT NULL ,
            code_banque   Int NOT NULL ,
            code_mutuelle Int NOT NULL ,
            id_grade      Int NOT NULL ,
            PRIMARY KEY (matricule )

  2. #2
    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
    D'abord tu corrige les fautes d'orthographe dans tes noms de tables parce que ça ne fait pas sérieux. Ensuite tu précise tes noms de colonne lors de l'insertion sinon c'est la foire aux devinettes. Ensuite tu utilise un preparedStatement pour ta requête plutôt que cette concaténation illisible et trouée de sql injections. Enfin tu nous donne le descriptif de ladite contrainte qui pose problème car elle n'est pas dans le descriptif des tables que tu as donné.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    D'abord tu corrige les fautes d'orthographe dans tes noms de tables parce que ça ne fait pas sérieux. Ensuite tu précise tes noms de colonne lors de l'insertion sinon c'est la foire aux devinettes. Ensuite tu utilise un preparedStatement pour ta requête plutôt que cette concaténation illisible et trouée de sql injections. Enfin tu nous donne le descriptif de ladite contrainte qui pose problème car elle n'est pas dans le descriptif des tables que tu as donné.
    j'ai corrigé les fautes dans les noms de tables , et j'ai utilisé prepareStatement et jai encore une erreur (oracle 01861 literal does not match format string )
    voici le code :
    Code sql : 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
    String sql = "insert into personnel (matricule ,cin_per ,nom_per,prenom_per,date_rec,id_dossier,code_banque,code_mutuelle,id_grade,cmr) values(?,?,?,?,?,?,?,?,?,?)";
     
           psm=con.prepareStatement(sql);
           psm.setString(1,mat.getText());
           psm.setString(2,cin.getText());
           psm.setString(3,Nom_txt.getText());
           psm.setString(4,pr.getText());
           psm.setString(5,((JTextField)dt_rec.getDateEditor().getUiComponent()).getText());
           psm.setString(6,id_doss.getText());
           psm.setString(7,code_bnq.getText());
           psm.setString(8,code_mut.getText());
           psm.setString(9,id_grade.getText());
           psm.setString(10,cmr.getText());
           psm.executeQuery();
                JOptionPane.showMessageDialog(null, "Terminer !!");
            }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
            }
    D'abord j'essaye d’inséré dans la premier table celle de personnel j'ai eu ce probleme de conversion " je crois " j'essaye de faire la conversion plusieurs fois en vin

  4. #4
    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
    tu as visiblement des colonne de type date vu leur nom, tu dois utiliser la méthode setDate sur le préparedStatement et non pas set String, sinon oracle s'attends à une string au format oracle date qui est pas trop ce que l'utilisateur tappe en général

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/08/2015, 17h46
  2. Réponses: 2
    Dernier message: 03/04/2012, 20h00
  3. Cannot add or update a child row: a foreign key constraint fails
    Par dubitoph dans le forum Administration
    Réponses: 4
    Dernier message: 25/01/2012, 08h29
  4. Réponses: 3
    Dernier message: 28/11/2011, 17h26
  5. Réponses: 0
    Dernier message: 12/12/2007, 21h10

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