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 :

Plusieurs clefs étrangères


Sujet :

JDBC Java

  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut Plusieurs clefs étrangères
    Bonsoir,

    J'ai une table nommée collabo avec 3 champs (CodeA,IdentM,IdentI) elles sont toutes des clefs étrangères ; j'aimerais créer un formulaire qui me permettra de modifier les différentes valeurs; voici un aperçu.





    Dans ma méthode update, que dois-je mettre après le WHERE ? Car je n'ai pas pk...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public boolean updateCollabo(Collabo col)
        {
            String req = "Update collabo set IdentM = '" + col.getMusicienApp().getIdentM() +
            "', IdentI = '" + col.getInstrumentApp().getIdentI() + "' where CodeA = '"
            + col.getCodeA() + "'";
     
            boolean ok = ConnexionMySQL.getInstance().actionQuery(req);
     
            return ok;
        }
    Par contre ma méthode Insert fonctionne parfaitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public boolean insertCollabo (Collabo col)
        {
            boolean ok = ConnexionMySQL.getInstance().actionQuery("Insert into collabo (CodeA, " +
            "IdentM, IdentI) values ('" + col.getCodeA() + "','" + col.getMusicienApp().getIdentM() + "','" + col.getInstrumentApp().getIdentI() +  
             "'" + ")");
     
            return ok;
        }
    Edit : je sais que ce type de requête est obsolète, mais je suis obligé de faire ainsi.

  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
    Alors c'est assez compliqué

    d'abord, j'éviterais ce choix malheureux de nom de classe / table qu'est collabo. En Belgique, avec notre passé, c'est un terme assez empreint de négativité

    ensuite, tes collaborateurs, tu les références comment en temps normal si il n'y a pas de primary key? Y as-t-il une clé unique quelconque sur cette table?

    Quel est le type de base de données? Certaines base te créent une clé cachée genre le ROWID en oracle qui peut servir.

    Autre option, quand tu fais ton select en jdbc, tu obtiens un rowset. En te positionnant dedans (rowset.absolute(XXX)) et en faisant un rowset.setReadonly(false), tu peux commencer à modifier cette ligne en faisant des appels rowset.updateXXX(columne,value) suivi de rowset.update().


    Tu peux aussi faire un update avec le where qui reprend les valeur des trois anciennes colones.

    Mais avoir une primary key ca reste plus pratique.

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Ma database est disposé ainsi...


    J'aurais préféré faire un update avec le WHERE si c'est possible, par contre je ne connais pas du tout la syntaxe pour faire 3 WHERE dans ma requête?

    ps: Désolé pour l'entité "Collabo" , le nom de cette table m'a été imposé.

  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 ne fais pas trois WHERE, tu fais un seul WHERE, exactement comme dans le select, avec plusieurs critère:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE A=... AND B=.... AND C=...

  5. #5
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Merci pour ton aide, j'ai compris ce que je devais faire par contre j'ai une erreur syntaxique en rapport avec les AND

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Erreur de syntaxe près de '2'and'IdentI = '3'' Ã* la ligne 1
    Requete :Update collabo set CodeA = 'AAAAA9', IdentM = '2', IdentI = '3' where CodeA = 'AAAAA9'and'IdentM = '2'and'IdentI = '3'

    Comment adapter les AND dans ma requête SQL liée au Java ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String req = "Update collabo set CodeA  = '" + col.getCodeA() +
            "', IdentM = '" + col.getMusicienApp().getIdentM() + 
            "',  IdentI = '" + col.getInstrumentApp().getIdentI() + 
            "' where CodeA = '" + col.getCodeA() + "'" + "and" + "'IdentM = '" + col.getMusicienApp().getIdentM() + "'" +
            "and" + "'IdentI = '" + col.getInstrumentApp().getIdentI() + "'";

  6. #6
    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
    il te manque des espaces autour du and

  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
    Et une erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    + "'IdentI = '" + col.getInstrumentApp().getIdentI() + "'";
    La quote devant IdentI. Pareil d'ailleurs pour IdentM.

    En plus les quotes pour des int, ça fait de la conversion implicite inutile (si c'est supporté par le SGBD).

    Au lieu de compliquer la vie (pour ne pas dire "te faire ch***") avec les quotes, utilise des PreparedStatement.
    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
    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
    Effectivement, préfère les PreparedStatements. Sinon, le jour où tu devra encoder un "Viola d'amore" comme instrument, tu va avoir de sales surprises

  9. #9
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    Merci pour votre aide je vais utiliser PreparedStatement ça va être plus simple.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2015, 13h41
  2. [MySQL-5.0] Ma requête ne s'exécute pas
    Par pacar dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/05/2014, 11h33
  3. Requête ne s'exécutant pas sans LIMITE 0, 15000
    Par lodan dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/11/2009, 16h12
  4. requête select ne s'exécute pas ?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 25/08/2006, 08h27
  5. Réponses: 13
    Dernier message: 30/01/2006, 14h21

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