12
votes

Récupérer une carte d'enregistrement juste insérée dans une base de données Java DB (Derby)

Je me connecte à une base de données Java DB avec JDBC et souhaitez extraire l'ID (qui se trouve sur l'incrément automatique) du dernier enregistrement inséré.

Je vois que c'est une question commune, mais je vois Solutions Utilisation par exemple MS SQL Server, quel est l'équivalent pour Java DB?


0 commentaires

3 Réponses :


3
votes

Vous pourrez peut-être obtenir ce que vous recherchez à l'aide de la fonction identity_val_local. ( Référence Derby )

Cette fonction est censée renvoyer "la valeur la plus récente attribuée d'une colonne d'identité pour une connexion, où l'affectation s'est produite à la suite d'une instruction d'insertion à une seule ligne à l'aide d'une clause de valeurs."

Il convient de noter que cette fonction retournera décimale (31,0), quel que soit le type de données réel de la colonne d'identité correspondante.

Aussi, cette seulement fonctionne pour des inserts à une seule ligne contenant une clause de valeurs.


0 commentaires

26
votes

Pas besoin d'utiliser un SQL spécifique SMDM pour cela.

C'est ce que GetGeneratedKeys ( ) est pour.

quand Préparation de votre déclaration Vous transmettez le nom (s) des colonnes générées automatiquement que vous pouvez ensuite récupérer à l'aide de GetGeneratedkeys () < Pré> xxx

Notez que les noms de colonne sont sensibles à la casse dans ce cas (dans Derby et de nombreux autres SGBD). de
nouvelle chaîne [] {"id_column"} est quelque chose de différent de nouvelle chaîne [] {"id_column"}

Alternativement vous pouvez aussi Utilisation: xxx


5 commentaires

Je veux juste confirmer cela, pensais que je suis sûr que je suis sûr de 99%, cela renvoie-t-il toujours la valeur de colonne générée automatiquement prévue, même si plusieurs instructions d'insertion ont été exécutées dans le délai entre l'insertion et la récupération de la valeur de colonne à l'aide de GetGeneratedKeys () < / code>?


Ne fonctionne pas pour moi, il ressemble également à JDBC n'est pas complètement Supporte les colonnes d'identité de Derby ? Je reçois une exception disant que ma table n'a pas une colonne générée automatiquement nommée «ID», qu'il fait clairement :)


Quoi qu'il en soit, j'ai été résolu en utilisant préparétstatement.Return_generated_keys au lieu du tableau de chaînes comme deuxième argument dans la société préparée. (Je suis sûr que mon problème n'était pas une faute de frappe si quelqu'un se demandait).


@ALEX: Je suis 100% Le code ci-dessus fonctionne avec Apache Derby. Votre lien est destiné à un groupe qui traite avec ActiveJDBC - qui est un document ORM (= "Modèle relationnel obscurposé") sur le dessus de JDBC. "JDBC" lui-même ne supporte rien - c'est juste une spécification qui doit être mise en œuvre par le fournisseur du pilote JDBC. Cela n'a rien à voir avec le pilote JDBC Derby fournit. Si que framework ne fonctionne pas avec Derby, il ne s'agit ni de la faute de «JDBC» ni de la faute de Derby. Peut-être que vous n'avez pas spécifié la colonne correctement, par ex. nouvelle chaîne [] {"id"} est autre chose que nouvelle chaîne [] {"id"}


Oh je vois, merci pour la clarification. Et oui apparemment Les noms de colonne sont sensibles à la casse, j'étais sûr qu'ils travaillaient à la fois, merci à nouveau @A_HORSE_WITH_NO_NAME. Je laisserai mon commentaire de toute façon simplement fournir un moyen plus général d'obtenir les colonnes.



1
votes

Pour ceux qui ont des problèmes d'obtenir l'identifiant autocrament généré comme si j'avais l'habitude de Java Derby, ma réponse peut être utile. XXX

Réponse Copied de ici


0 commentaires