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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    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 éclairé
    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
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    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 éclairé
    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
    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
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    il te manque des espaces autour du and

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2015, 14h41
  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, 12h33
  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, 17h12
  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, 09h27
  5. Réponses: 13
    Dernier message: 30/01/2006, 15h21

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