66 votes

À propos de "_id" dans l'Android SQLite

Est le champ "_id" nécessaire dans Android SQLite?

55voto

Al Sutton Points 3025

_id est utile lorsque vous utilisez le renforcement de Cartes qui rendent l'utilisation d'un Curseur (par exemple ResourceCursorAdapter). Il est utilisé par ces adaptateurs pour fournir un ID qui peut être utilisé pour se référer à la ligne spécifique dans la table qui porte le le point en ce que l'adaptateur est utilisé (par exemple, une ligne dans une liste).

Il n'est pas nécessaire si vous n'allez pas être en utilisant des classes qui ont besoin d'un _id colonne dans un curseur, et vous pouvez également utiliser "comme _id" pour en faire une autre colonne apparaît comme si elle appelle _id de votre curseur.

22voto

Phil Lello Points 4582

Pourquoi ne pas utiliser _ROWID_?

SQLite offre cela de toute façon, pour chaque ligne, de sorte que vous pouvez simplement alias pour _id dans votre instruction select.

11voto

Aurora Points 2456

Techniquement pas le champ _id n'est pas nécessaire, cependant, si vous faites usage de l' CursorAdapter classe (que vous êtes probablement, surtout si vous travaillez avec le bloc-notes exemple), alors oui

"Le Curseur doit inclure une colonne nommée "_id" ou de cette classe ne travail"

comme expliqué dans la documentation ici. Malheureusement, les exemples de code ne sont pas très claire à ce sujet.

9voto

Brad Hein Points 4874

C'est très pratique dans de nombreux cas, d'avoir un champ id. Je préfère la mienne pour être auto-incrémentation (comme illustré ci-dessous). Je suis toujours à la recherche de nouvelles utilisations pour le champ id :)

Quand vient le temps de fixer les données à une carte, j'aime utiliser un alias de nom de table pour interroger le champ id en tant que _id. Exemple: SELECT id _id, msg from message order by id. De cette façon, l'adaptateur voit un champ appelé" _id et tout le monde est heureux.

Voici un exemple de la façon dont je définis mes tables:

CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);

2voto

Geucimar Points 11

Sûrement pas. Sa commodité champ que certains widgets comme ListView utilise pour générer les données. Voir ce bon article: http://www.casarini.org/blog/2009/android-contentprovider-on-sqlite-tables-without-the-_id-column/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X