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 :

[Update] setString sur une clé primaire


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Par défaut [Update] setString sur une clé primaire
    Bonjour!

    Je n'arrive pas a faire un update sur une table dont la clé primaire est une chaine de caractère.
    C'est cette même clé primaire que j'essaye de changer.
    Voici ma manière de procéder:
    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
     
    			String requete = "update dbo.ETABLISSEMENT_SCOLAIRE SET "
    					+ "CIR_LIBEL='Inconnu'," + "COM_CODE= ?," + "QUA_CODE=?,"
    					+ "ETB_LIBEL=?," + "ETB_BP=?," + "ETB_TEL=?,"
    					+ "ETB_ANCREA=?," + "ETB_REFTER=?,"+ "ETB_CODE=?," + "ETB_DISCHEFL_COM=?"
    					+ " where ETB_CODE=?";
    			PreparedStatement stmt = connex.prepareStatement(requete);
    			stmt.setInt(1, etb.getCommuneId());
    			stmt.setString(2, etb.getSousLocalisationEtab());
    			stmt.setString(3, etb.getNomEtab());
    			stmt.setInt(4, etb.getBpEtab());
    			stmt.setString(5, etb.getTelEtab());
    			stmt.setInt(6, etb.getConstrAnneeEtab());
    			stmt.setString(7, etb.getKbisEtab());
    			stmt.setInt(8, etb.getDistChefEtab());
    			stmt.setString(9, etb.getIdEtab()); // ici le nouveau code
    			stmt.setString(10, oldCode); // ici l'ancien code
    			stmt.executeUpdate();
    J' obtient une erreur de type violation de contrainte sur la clé primaire alors qu'elle n'est pas en doublon dans la base:
    Par exemple j ai une clé qui est '0000' et je la passe à '0002', il me donne l'erreur. Par contre j ai dand ma base une entrée qui a un id égal à '2' ( peut-être est-ce la source du problème?)
    J'utilise SQL Server 2005 et le champ en question est de type char(4)

    D'avance merci =)

  2. #2
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Citation Envoyé par Spiff__ Voir le message
    Bonjour!
    ...
    j ai dand ma base une entrée qui a un id égal à '2' ( peut-être est-ce la source du problème?)
    ...
    D'avance merci =)
    Bonjour,


    ça pourrait être la source du problème si id est un nombre ou une valeur qu'on convertit (implicitement à un type ou un sous type NUMBER):

    Voici ce qu'on obtient si on exécute la requête suivante sur Oracle 11g
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> SELECT 0002 + 2 FROM DUAL;
     
       0002+2
    -----------------
    	 4
    SQL>
    donc 0002 est interprété comme 2


    ou encore mieux que ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> BEGIN
    	IF (0002 = 2) THEN
    		DBMS_OUTPUT.PUT_LINE('duplicate values');
    	ELSE
    		DBMS_OUTPUT.PUT_LINE('distinct values');
    	END IF;
    END;
    /
    duplicate values
     
    PL/SQL procedure successfully completed.
     
    SQL>

    Essaie donc de choisir une autre valeur pour voir si le problème persiste.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Par défaut
    Salut,

    Merci pour ta réponse.

    Lorsque j'exécute ma requête depuis SQL Server elle fonctionne directement. Le problème vient a mon avis du preparedStatement qui est mal utilisé.

    Je ne sais vraiment pas d'où cela peut venir

Discussions similaires

  1. Update sur une clé primaire
    Par Morji2810 dans le forum PL/SQL
    Réponses: 14
    Dernier message: 22/07/2014, 16h44
  2. Réponses: 4
    Dernier message: 12/07/2012, 14h39
  3. update sur une clé primaire [zOS]
    Par michael08 dans le forum DB2
    Réponses: 6
    Dernier message: 17/12/2010, 16h36
  4. Update Sql sur une Query Filtré
    Par Soulama dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/10/2006, 14h47
  5. Réponses: 2
    Dernier message: 29/09/2004, 09h07

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