Vous devez être membre et vous identifier pour publier un article.
Les visiteurs peuvent toutefois commenter chaque article par une réponse.
[Derby] Récupérer la valeur d’un auto incrément
Article publié le 20/10/2008 14:37:00Avec Derby (JavaDB, la base de données Java depuis 1.6) comme avec d’autres bases de données, nous pouvons utiliser une valeur auto-incrémentée, générée par la DB, pour identifier chaque ligne d’une table (je n’insisterais jamais assez sur l’importance d’avoir des identifiants totalement indépendants de la logique des données).
Voici un exemple de tables, une table personne, qui contient les informations minimales, et une table enseignant, qui pourrait comporter des informations plus spécifiques (comme par exemple, son école, la matière enseignée, etc.).
Chaque enseignant est au minimum une personne, donc nous pouvons lier la table enseignant à l’identifiant de la personne.
Les tables
Code SQL (12 lignes)
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), lastName VARCHAR(50), firstName VARCHAR(50), birthdate DATE, sex VARCHAR(50) ); personId INTEGER NOT NULL /* + autre champs spécifiques à l’enseignant */ );
Derby et le code Java
Mais si nous utilisons JDBC et pas hibernate, comment récupérer l’identifiant de la personne qui vient d’être sauvée?
Code Java (34 lignes)
private void insertTeacher(Teacher teacher) { try { // Statement.RETURN_GENERATED_KEYS to use the generated id to insert // into the teacher table PreparedStatement psInsert = DerbyFactory .getDBConnection() .prepareStatement( "INSERT INTO person (lastName, firstName, birthdate, sex) VALUES (?,?,?,?)", psInsert.setString(1, teacher.getLastName()); psInsert.setString(2, teacher.getFirstName()); .getTime())); psInsert.setString(4, teacher.getSex().name()); ConsoleHelper.writeTitle("Insert into db\n" + psInsert.toString()); psInsert.executeUpdate(); // Reads the generated id while (rs.next()) { int lastIndex = rs.getInt(1); psInsert = DerbyFactory.getDBConnection().prepareStatement( "INSERT INTO teacher(personId) VALUES ( ? )"); psInsert.setInt(1, lastIndex); ConsoleHelper.writeTitle("Insert into db\n" + psInsert.toString()); psInsert.executeUpdate(); } ex.printStackTrace(); } }
Nous devons déclarer, au moment de préparer la requête d’insertion de la personne, que nous désirons utiliser la valeur générée par Derby.
Code Java (1 ligne)
Statement.RETURN_GENERATED_KEYS
ensuite nous pouvons lire cette valeur après avoir exécuté la requête
Code Java (3 lignes)
//suite du code... int lastIndex = rs.getInt(1);
Un article de Steph
Source : indéterminée
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 13/09/2004 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/ast-rf-445.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.