D'INSERTION, et d'obtenir l'auto-incrémenté de la valeur
Considérons le tableau suivant:
create table language (
id integer generated always as identity (START WITH 1, INCREMENT BY 1),
name long varchar,
constraint language_pk primary key (id)
);
À qui je voudrais insérer une entrée de cette façon.
insert into language(name) values ('value');
Comment on sait quelle valeur pour id
a été créé? Juste faire une sélection à l'aide du name
champ n'est pas valide, car il peut y avoir des doublons.
Dans Firebird je sais que vous pouvez utiliser
J'utilise Derby/Java DB comme décrit dans les tags
stackoverflow.com/questions/3131064/... stackoverflow.com/questions/5576152/... stackoverflow.com/questions/6353343/getting-last-inserted-id stackoverflow.com/questions/590927/get-new-sql-record-id Voter pour la fermer.
Aucune de ces réponses semblent résoudre ce problème spécifique.
Returning ID
pour l'avoir, d'insertion et de retour à la nouvelle valeur pour une colonne. Les autres devraient avoir quelque chose de similaire, bien que je ne suis pas familier personnellement avec Derby.J'utilise Derby/Java DB comme décrit dans les tags
stackoverflow.com/questions/3131064/... stackoverflow.com/questions/5576152/... stackoverflow.com/questions/6353343/getting-last-inserted-id stackoverflow.com/questions/590927/get-new-sql-record-id Voter pour la fermer.
Aucune de ces réponses semblent résoudre ce problème spécifique.
OriginalL'auteur vemv | 2011-07-22
Vous devez vous connecter pour publier un commentaire.
À travers la plaine SQL:
Voir le manuel pour plus de détails: http://db.apache.org/derby/docs/10.7/ref/rrefidentityvallocal.html
Quand vous faites cela, à partir d'une classe Java (via JDBC), vous pouvez utiliser getGeneratedKeys() après la "demande" avec la approriate executeUpdate() méthode.
OriginalL'auteur a_horse_with_no_name
Vous utilisez le pilote JDBC méthode
comme indiqué dans le Derby manuel.
Voir également la documentation Javadoc: DatabaseMetaData#supportsGetGeneratedKeys()
et Déclaration#getGeneratedKeys()
OriginalL'auteur eckes
Vous pouvez exécuter cette instruction (NB, pas sûr à 100% de cette syntaxe est correcte pour le Derby:
Pour trouver le dernier ID inséré.
Alternative pour le Derby:
Évidemment, ce ne seront efficaces que si pas d'autres plaquettes (y compris les insertions par d'autres utilisateurs) ont passé entre votre insert et select.
Voir aussi ce discussion:
Exactement, comme je l'appelle dans la réponse.
Cela va faire dans mon programme spécifique (merci!) mais c'est intéressant, ce que @ain dit
Eh bien, vous avez ajouté/modifié après mon commentaire? Il n'était pas là quand j'ai écrit mon commentaire...
Mon commentaire sur les inserts d'autres affectant l'ID retourné était là depuis le début. Après la lecture de votre commentaire, j'ai ajouté la note spécifique sur les autres utilisateurs à interagir avec la table, comme c'est un point très valable.
OriginalL'auteur xan