Quelle est la meilleure façon d'obtenir le dernier identifiant inséré en utilisant sqlite de Java? Google me donne des réponses différentes - certains disent sélectionner le dernier-insert-rowid; d'autres disent appel statement.getGeneratedKeys(). Quelle est la meilleure route à prendre? (Je veux juste retourner l'identifiant, ne pas l'utiliser pour d'autres insertions ou quoi que ce soit.)Quelle est la meilleure façon d'obtenir le dernier identifiant inséré en utilisant sqlite de Java?
Quelle est la meilleure façon d'obtenir le dernier identifiant inséré en utilisant sqlite de Java?
Répondre
Utilisez getGeneratedKeys() si votre pilote JDBC le prend en charge. Vous ne voulez pas essayer de récupérer la clé après l'insertion. Si votre pilote ne supporte pas getGeneratedKeys() alors j'obtiendrais la valeur suivante de la clé avant l'insertion.
Chaque approche exécute la même instruction SQL exacte, mais java.sql.Statement.getGeneratedKeys()
est plus portable pour différentes bases de données sous-jacentes.
L'utilisation de la fonction API sqlite3_last_insert_rowid()
C ou de la fonction SQL last_insert_rowid()
est la méthode correcte pour récupérer le rowid généré lors de la dernière insertion.
SQLite prend en charge la syntaxe SQL scalar function comme:
SELECT function-name();
Par conséquent, si vous n'avez pas accès à l'API C directement, vous pouvez appeler la fonction scalaire last_insert_rowid()
via une déclaration SELECT
.
Si vous regardez le source code pour la mise en œuvre SQLiteJDBC (est-ce que vous utilisez?), Vous verrez que c'est exactement ce que l'auteur de cette enveloppe JDBC a fait:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}
- 1. Informix: comment obtenir un identifiant du dernier enregistrement inséré
- 2. Quelle est la meilleure façon de faire ce programme Java?
- 3. Quelle est la meilleure façon de convertir une base de données mysql en une base sqlite?
- 4. Quelle est la meilleure façon de synchroniser 2 tables sqlite sur http et json?
- 5. Quelle est la meilleure façon d'obtenir le hachage d'un QPixmap?
- 6. Quelle est la meilleure façon d'apprendre Java EE pratiquement?
- 7. Quelle est la meilleure façon de glisser la section de html en utilisant javascript?
- 8. Quelle est la meilleure façon de vérifier la capacité du système de fichiers en utilisant .Net?
- 9. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 10. Meilleure façon d'obtenir la géolocalisation en Java
- 11. Quelle est la meilleure bibliothèque Java OXM?
- 12. Quelle est la meilleure façon de "fausser" les méthodes DELETE et PUT en utilisant JAX-RS?
- 13. Quelle est la meilleure façon d'analyser de nombreux arguments de ligne de commande complexes en Java?
- 14. Quelle est la meilleure façon de chiffrer un clob?
- 15. Quelle est la meilleure façon de créer une fenêtre de notification lisse en Java?
- 16. Quelle est la meilleure façon de lire une feuille de sprites en Java?
- 17. En C#, quelle est la meilleure façon d'enchaîner les constructeurs?
- 18. Quelle est la meilleure façon d'implémenter le versioning d'un binaire?
- 19. Quelle est la meilleure façon d'enregistrer un RichTextFile en C#?
- 20. Quelle est la meilleure façon d'effacer l'écran en Perl?
- 21. Quelle est la meilleure façon d'écrire [0..100] en C#?
- 22. Quelle est la meilleure façon de dupliquer fork() dans Windows?
- 23. quelle est la meilleure façon de marquer un texte?
- 24. Comment obtenir le dernier identifiant inséré dans une expression personnalisée SQL Linq To Sql?
- 25. Quelle est la meilleure façon de modifier les informations d'identification d'un service Windows en utilisant C#
- 26. Quelle est la meilleure façon de remplacer du texte dans un fichier en utilisant C#/.NET?
- 27. Quelle est la meilleure façon de lire les données CSV?
- 28. Quelle est la meilleure façon d'extraire des commentaires de cellules Excel en utilisant Perl ou Ruby?
- 29. Quelle est la meilleure façon d'obtenir des informations spécifiques au système d'exploitation en Java?
- 30. Quelle est la meilleure façon de remplacer le bouton Parcourir le fichier en HTML?
De quelle façon est-ce que "la prochaine valeur de la clé avant l'insertion" est meilleure que "la plus grande valeur après l'insertion"? Les deux ont le même type de condition de concurrence, et tous deux reposent sur des incréments monotones et uniques de la clé. –
L'hypothèse est que la clé récupérée avant l'insertion ne serait basée sur aucune requête de la table cible, mais provenant d'un fournisseur de clés. En termes Oracle, ce serait Select sequence_name.nextval de dual. Je ne connais pas les détails pour SQL Lite mais certains appels api qui renvoient une clé dans sa propre transaction autonome complètement indépendante de l'insert. Cela dit ... utilisez getGeneratedKeys(). –
row = stmt.getGeneratedKeys(). GetInt (1); –