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

Langage SQL Discussion :

Insertion dans plusieurs tables


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Insertion dans plusieurs tables
    Salut !

    J'ai un problème avec l'insertion de données... je veux récupérer les données d'un formulaire et les stocker dans une base de données.
    Il faut insérer chaque ensemble du formulaire dans une table différente.
    Le problème que je rencontre est que quand j'exécute une clause INSERT INTO ça fonctionne mais quand j'exécute plusieurs clauses INSERT INTO ça ne marche pas.

    Comment dois-je faire pour réussir à insérer les informations récupérées depuis un formulaire dans différentes tables ?
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PreparedStatement stmt= connect.prepareStatement("INSERT INTO user(Prenom,Nom,Tel,Adresse,Email,) values ('"+prenom+"','"+Nom+"','"+tel+"','"+adresse+"','"+email+"')");
    PreparedStatement stmt1=connect.prepareStatement("INSERT INTO departement(Nom_dprtm) values ('"+departement+"')");
    PreparedStatement stmt2=connect.prepareStatement("INSERT INTO bureau(Bureau) values ('"+bureau+"')");
    PreparedStatement stmt3=connect.prepareStatement("INSERT INTO login(Identifiant,PassWord) values ('"+pseudo+"','"+password+"')");
     
               stmt.executeUpdate();
               stmt1.executeUpdate();
               stmt2.executeUpdate();
               stmt3.executeUpdate();
    Merci d'avance.

  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
    ça marche pas
    Mais encore ? Plus précisément ?

    Je ne vois syntaxiquement rien d'anormal dans vos requêtes ; le problème concerne donc à mon avis plutôt la manière de causer avec le SGBD par votre langage de programmation. C'est du Java ?

    Quelques remarques tout de même :
    1) Allez-vous insérer le même département autant de fois qu'il y a d'utilisateur de ce département ?

    2) Pourquoi avoir séparé le login de l'utilisateur alors que son identifiant et son mot de passe sont bien des propriétés d'un utilisateur ?

    3) Vous n'alimentez aucune clé étrangère par vos requêtes ; pourtant, l'identifiant, le password, le département et le bureau ne sont-ils pas ceux de l'utilisateur ?
    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
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 152
    Points : 7 402
    Points
    7 402
    Billets dans le blog
    1
    Par défaut
    C'est bien d'utiliser des "preparedstatement"...

    Mais si vous utilisiez des requêtes paramétrées, ce serait quand même mieux, d'autant que c'est fait pour !

    9 chances sur 10 que votre problème vienne d'un type de données ou d'une apostrophe qui se balade dans vos données... qu'une requête paramétrée aurait géré sans problème !
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PreparedStatement stmt= connect.prepareStatement("INSERT INTO user(id_cat,id_bureau,id_dprtm,Nom,Prenom,Tel,Adresse,Email,Identifiant,Password) values ('"+id_cat+"','"+id_bureau+"','"+id_dprtm+"','"+nom+"','"+prenom+"','"+tel+"','"+adresse+"','"+email+"','"+pseudo+"','"+password"')");
    PreparedStatement stmt1=connect.prepareStatement("INSERT INTO departement(Nom_dprtm) values ('"+departement+"')");
    PreparedStatement stmt2=connect.prepareStatement("INSERT INTO bureau(Bureau) values ('"+bureau+"')");
     
               stmt.executeUpdate();
               stmt1.executeUpdate();
               stmt2.executeUpdate();
    Merci pour votres réponses.......voilà j'ai organisé le code, dans chaque table il y a l' id de cette table, je l'ai pas écrit dans les requètes pcqu'il est auto-incrément. je veux savoir comment pourrai-je récupérer l'id_bureau et id_dprtm des tables bureau et departement réspectivement et les insérer dans la table user.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il faut prendre en compte la remarque de StringBuilder et utiliser des paramètres dans les requêtes préparées, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PreparedStatement stmt2=connect.prepareStatement("INSERT INTO bureau(Bureau) values (?)");
    -- ou
    PreparedStatement stmt2=connect.prepareStatement("INSERT INTO bureau(Bureau) values (:bureau)");
    Ensuite il faut faire appelle à une méthode bindParam (ou un nom du genre en fonction de la lib utilisée)
    Puis on execute la requête.

    Pour récupérer l'id inséré ça dépend du SGBD que tu n'as pas précisé.

  6. #6
    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
    La colloration syntaxique indique cette fois qu'il y a sans doute un problème d'apostrophes ou de guillemets dans votre code.

    Et comme vous n'avez pas répondu à la question :
    Citation Envoyé par CinéPhil
    C'est du Java ?
    Vous n'aurez probablement pas de réponse efficace dans ce forum consacré uniquement au langage SQL !
    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 !

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    salut! lol oui c'est du java Mr CéniPhil !
    j'ai réglé le problème , c'est bon !!

    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
    String req1="SELECT id_bureau FROM bureau WHERE Num_Bureau='"+bureau+"'";
     String req2="SELECT id_dprtm FROM departement WHERE Nom_dprtm='"+departement+"'";
     PreparedStatement stmt1=connect.prepareStatement("INSERT INTO bureau(Num_Bureau) values ('"+bureau+"')");
                              stmt1.executeUpdate();
                              ResultSet rs1=st.executeQuery(req1);            
                              while(rs1.next()){
                                   IdBureau = rs1.getInt(1);      
                              }
     
                              PreparedStatement stmt2=connect.prepareStatement("INSERT INTO departement(Nom_dprtm) values ('"+departement+"')");
                              stmt2.executeUpdate();
                              ResultSet rs2=st.executeQuery(req2);
                              while(rs2.next()){
                                   IdDprtm = rs2.getInt(1);
                              }
                              PreparedStatement stmt= connect.prepareStatement("INSERT INTO user(id_cat,id_bureau,id_dprtm,NomUser,PrenomUser,NumTel,Adresse,Email,Sexe,Identifiant,Password) values ('"+IdCat+"','"+IdBureau+"','"+IdDprtm+"','"+nom+"','"+prenom+"','"+tel+"','"+adresse+"','"+email+"','"+sexe+"','"+pseudo+"','"+password+"')");
                              stmt.executeUpdate();
    je vous remercie tous pour votre aide

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

Discussions similaires

  1. procedure stockée pour insertion dans plusieurs tables
    Par bigwal2007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 22/11/2007, 22h58
  2. Insertion dans plusieurs table avec un index commun
    Par irongomme dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2007, 11h41
  3. Insertion dans plusieurs tables en meme temps
    Par weed dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/07/2007, 11h13
  4. [SQL] Insertion dans plusieurs tables
    Par fadex dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2007, 11h47
  5. Insertion dans plusieurs tables : Transaction ?
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/07/2006, 18h25

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