Connexion JDBC : Récupérer id auto incrément
Jerony_2338
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Jerony_2338 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Jerony_2338 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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
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 !.
// 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 !.
A voir également:
- Connexion JDBC : Récupérer id auto incrément
- Gmail connexion - Guide
- Connexion chromecast - Guide
- Gmail connexion autre compte - Guide
- Site inaccessible n'autorise pas la connexion - Guide
- Connexion sctr - Forum Discord
1 réponse
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
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
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é.
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.