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)
INSERT INTO user (id_user,...) VALUES (DEFAULT,...) RETURNING id_user
me retourne null
2)
1 2 3
|
INSERT INTO user (id_user,...) VALUES (DEFAULT,...)
SELECT currval(pg_get_serial_sequence('user','id_user')) |
me retourne null
3)
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...
Partager