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

PostgreSQL Discussion :

Récuperer une clé après insert


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Récuperer une clé après insert
    salut tout le monde je viens de faire une recherche sur le forum mais j'aurais quand même besoin de quelques explications

    je développe un programme java qui utilise ibatis pour dialoguer avec une base postgresql 8.2

    dans une transaction j'aimerais pouvoir insérer une entrée dans une table, récupérer l'id auto-généré de cette entrée et l'utiliser dans plusieurs requête par la suite

    ma recherche m'a amené à considérer 2 solutions :
    1) l'utilisation de RETURNING id à la fin de la requête INSERT
    2) l'utilisation de SELECT currval() après exécution de la requête INSERT

    la première solution me retourne null et la seconde également

    la personne qui a développé la base de données a déclaré l'id de la table dans laquelle je veux faire une insertion comme un entier qui prend comme valeur par défaut la valeur suivante d'une séquence

    cette séquence sert en fait de clé primaire à l'ensemble des tables de la base

    en gros si je veux insérer une entrée dans la table user et que je veux récupérer id_user :

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO user (id_user,...) VALUES (DEFAULT,...) RETURNING id_user
    me retourne null

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO user (id_user,...) VALUES (DEFAULT,...)
    SELECT currval(pg_get_serial_sequence('user','id_user'))
    me retourne null

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO user (id_user,...) VALUES (DEFAULT,...)
    SELECT currval('public.id')
    me retourne un entier

    je voudrais savoir si cet entier correspond bien à l'id_user de l'entrée que je viens d'insérer ou alors s'il correspond à un id_xxx de la dernière entrée réalisée dans une table de la base

    si vous avez une méthode robuste à me proposer je suis preneur

    merci

    [edit]

    petite précision, la 1ère méthode fonctionne directement dans la console postgres mais pas en passant par ibatis...

  2. #2
    Membre averti
    Homme Profil pro
    Informaticien
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 357
    Points
    357
    Par défaut
    Bonjour,

    Personnellement j'utilise nextval("nom de la sequence") qui me retourne un numéro de séquence et que j'envoi ensuite dans la requête d'insert()

    comme cela tu est sûr de ta clef.

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/07/2010, 21h46
  2. [XL-2003] Récuperer une variable après un FileDialog
    Par ronibalbo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2009, 12h25
  3. récuperer une partition aprés l'installation UBuntu 9.04
    Par SOA_j2EE dans le forum Windows XP
    Réponses: 6
    Dernier message: 10/07/2009, 15h10
  4. [Sécurité] Effacer une variable après insertion ?
    Par psychoBob dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2006, 23h34
  5. Affichage d'une image après insertion dans une base
    Par leloup84 dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 16h34

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