MySQL : Récupérer l’auto-increment lors d’une insertion avec Spring DAO

 Article modifié dernièrement le 19 Avr 2011 @ 14 h 10 min

Besoin

Cet article est plus une astuce qu’autre chose, il montre le code à mettre en place pour récupérer l’identifiant « auto-increment » de votre table une fois l’objet inséré en base de données.


Sous Oracle Database avec les séquences, cela est plus simple, il suffit de récupérer l’attribut « nextval » de votre séquence avant l’insertion ou l’attribut « currval » après l’insertion : select votre_sequence.nextval from dual.

Sous MySQL, aucun moyen direct de récupérer cette valeur une fois la donnée insérée ou avant l’insertion, en tout cas pas à ma connaissance.

La solution présentée utilise Spring DAO et fonctionne avec les séquences et les auto-increment.

Avant

Voici la méthode update() de la classe JdbcTemplate que j’utilisais et qui ne me permettait pas d’obtenir la nouvelle valeur technique incrémentée :

Après

Voici à présent la bonne méthode update() qu’il faut utiliser en lui ajoutant un attribut de type KeyHolder qui permet de stocker la clé générée par l’insertion de l’objet en base.

A noter l’utilisation impérative de la classe NamedParameterJdbcDaoSupport qui permet l’utilisation de cette nouvelle méthode update() qui n’existe pas dans la classe JdbcDaoSupport :

Trois flèches vers le bas

1- Logiciel de brouillage d’adresse IP :

Contourner la censure en surfant anonyme

2- L’article explicatif :

La différence entre un proxy et un VPN

3- Comment espionner un smartphone (app) :

L’application de référence

Commentez ici

  • Greg 16 février 2010, 9 09

    Article diggué 🙂

  • logisim 18 mai 2010, 9 09

    La requête MySQL pour récupérer l’auto incrément : SELECT LAST_INSERT_ID();
    Mais cette solution est bien meilleure !

  • Mimie 18 mai 2010, 9 09

    Merci logisim pour la requête, mais l’idée était justement de ne pas avoir à effectuer une nouvelle requête en base. Au plaisir de te relire.

  • logisim 18 mai 2010, 9 09

    C’était en réponse à la phrase « Sous MySQL, aucun moyen direct de récupérer cette valeur une fois la donnée insérée ou avant l’insertion, en tout cas pas à ma connaissance. », alors qu’il y avait la requête Oracle correspondante juste au-dessus…
    Ça peut quand même être bien pratique à partir d’un langage qui ne gère pas ces mécanismes… si les transactions sont bien gérées !

  • Mimie 18 mai 2010, 10 10

    Tu as tout à fait raison, c’est un bon moyen sous MySQL de récupérer cet identifiant que je ne connaissais pas 🙂

Article suivant:

Article précédent:

Share This