Connexion JDBC : Récupérer id auto incrément

Fermé
Jerony_2338 Messages postés 6 Date d'inscription samedi 18 mai 2019 Statut Membre Dernière intervention 18 octobre 2019 - 18 mai 2019 à 06:08
Jerony_2338 Messages postés 6 Date d'inscription samedi 18 mai 2019 Statut Membre Dernière intervention 18 octobre 2019 - 20 mai 2019 à 00:54
Bonjour , je suis débutant je cherches actuellement a me connecter et a interagir avec une base de donnée (j'utilise Firebird... pas très judicieux je le concède ). J'ai une table Appartement avec les champs suivant (id(PK auto_incrément),idBatiment(FK table bâtiment ), nb_chambres,surface_habitable) , Mon problème est le suivant Lorsqu'un je souhaite insérer un nouvel appartement dans ma BD la méthode est censé me retournée l'id de l'appartement insérer , autrement dis j'ai une méthode de ce genre
// je ne mentionne que l'id du bâtiment dans lequel l'appartement se trouve autrement dis touts les autres champs ont des valeurs par défaut
String query = "Insert into Appartement(idBatiment) values(?)";
public Integer insertion(Appartement app){
// try catch + requete preparer PreparedStatement
return id_appartement
}

Le soucis c'est que je ne sais pas récupéré l'id de l'appartement j'ai plusieurs idées mais soit sa ne fonctionne pas , soit c'est pas du tout performant .

1 . Fonctionne pas : Jouer avec La Classe Statement (Statement.RETURN_GENERATED_KEYS) + ResultSet mais ne fonctionne pas avec la BD Firebird dû sans doute a la version Jaybird de Firebird qui est ancienne pour les méthodes que je souhaites appelé
2. Peu Performant ,trop coûteux et Dangereux(si plusieurs transaction se déroule au même moment et que la valeur de mon générateur a changer entre temps) : Ajouter une Nouvelle requête du genre "Select gen_id(id_appartement,0) from RDB$DATABASE" ,pour déterminer la dernière ligne insérer (pour mon auto incrément j'ai crée un générateur dans ma base de données c'est ce qui m'assure l'unicité des valeurs).

Quelqu'un a une idée de comment je pourrais procéder ? Merci d'avance pour vos interventions !.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 mai 2019 à 12:00
Bonjour,

Tu peux générer un UUID avec Java, l'insérer en base de donnée et t'en servir pour récupérer l'auto-incrément.

Voir : https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/UUID.html
0
Jerony_2338 Messages postés 6 Date d'inscription samedi 18 mai 2019 Statut Membre Dernière intervention 18 octobre 2019
18 mai 2019 à 16:50
Bonjour,

Merci pour ton intervention, J'y ai vite jeté un coup d'œil mais si j'ai bien compris C'est comme si je générais 2 Clés (Celle du générateur + Celle de UUID) pour au final n'en récupérer qu'une seule et d'après ce que j'ai pu voir la clé généré par le UUID est 4 fois plus grand (128 bits) qu'un type primitif entier du coup je me pose la question sur la légitimité de son utilisation surtout dans pour mon "contexte". L'exercice que je cherchais à faire était plutot de récupérer directement l'ID du générateur dans La BDD et de le renvoyer. Par contre je ne sais pas si certaines méthodes Dans la classe UUID sont disponibles permettant entre autre de récupérer directement l'ID du générateur, Si sa fonctionne comme Un ResultSet quoi. Merci encore pour le temps consacré.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > Jerony_2338 Messages postés 6 Date d'inscription samedi 18 mai 2019 Statut Membre Dernière intervention 18 octobre 2019
19 mai 2019 à 21:27
Pour récupérer l'id généré en base, la solution tu l'as déjà proposé, c'est Statement.RETURN_GENERATED_KEYS, mais si elle n'est pas applicable Firebird, il faut trouver des moyens de contournements qui seront forcément une solution dégradée, par exemple avec un deuxième id.

Et oui, l'UUID est très grand, mais il est unique parmi tout autre UUID dans le monde, alors que ton id auto-incrémenté n'est unique que pour ton instance de base de données.
0
Jerony_2338 Messages postés 6 Date d'inscription samedi 18 mai 2019 Statut Membre Dernière intervention 18 octobre 2019
20 mai 2019 à 00:54
Merci pour ton intervention . Oui je me doutes bien que dans un contexte "Réel" d'une application(Ce qui n'est pas encore le cas) L'utilisation de L'UUID s'avère être plus performant qu'un simple auto_incrément toute fois merci de l’éclaircissement .
0