2010-11-30 4 views
8

Ceci est probablement une question idiote mais je n'ai pas encore trouvé la réponse.Dois-je utiliser _ID comme clé primaire SQlite? et doit-il être un INT? (Android Dev)

Je souhaite utiliser une colonne TEXT avec mes propres noms uniques comme clé primaire dans une table. la petite section de code pour définir cela ressemble quelque chose comme ça dans mon projet:

...blahblah..."CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + "_ID TEXT PRIMARY KEY, "...blahblah.. 

Est-ce que ce travail que je compte? Ou peut-être que je dois utiliser "AS ID"? Je ne vois jamais que des tables uniques avec _ID comme un entier auto-incrémenté. Aussi c'était censé être une clé étrangère dans une autre table mais depuis que j'ai conçu ma base de données j'ai lu plus d'informations et je ne suis pas sûr que cela importera réellement android & SQLITE?

Merci pour les affiches ci-dessous, mais je suis un peu lent et je ne sais pas si j'applique l'information, pourriez-vous vérifier?

Donc, si j'ai une instruction create comme ceci:

"CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + " TEXT PRIMARY KEY, " + 
    IN_OUT + " TEXT, " + BUDGET_AMOUNT + " REAL, " + ACTUAL_AMOUNT_SPENT + " REAL, " 
    + AMOUNT_STRAYED + " REAL, " + OVERBUDGET_TF + " INTEGER, " + AUTOSPEND_TF + 
    " INTEGER);" 

Faites ensuite: db.execSQL ("SELECT ID, ID AS CAT_ITEM_ID")

Puis-je les utiliser de manière interchangeable alors? suis-je même près de chez moi? haha désolé je suis en train d'essayer!

Répondre

12

Vous pouvez créer et définir des tables comme vous le souhaitez, mais si vous devez utiliser la table via un CursorAdapter qui ne fonctionnera pas sans un réglage.

CursorAdapter: The Cursor must include a column named "_id" or this class will not work. 

Vous devez toujours émettre un select col1 as _id ... pour pouvoir fonctionner.

Il est donc recommandé d'utiliser _id dans le schéma de la table, et si vous souhaitez utiliser un autre nom, vous pouvez le faire. select _id, _id as customname ... sélectionnez donc deux fois la colonne _id avec des noms différents.

+0

Merci pour la réponse! Mais je suis encore un peu lent j'ai peur, si vous pouviez vérifier mon utilisation de vos conseils dans mon message original je l'apprécierais vraiment! – Holly

+0

Votre code semble bien mais le champ doit être '_ID' et non' ID' – Pentium10

3

Vous pouvez avoir tout ce que vous voulez comme clé primaire.

Mais si vous voulez par exemple utiliser un CursorAdapter qui affiche automatiquement les éléments d'une requête Cursor, vous devez avoir une colonne entière appelée _ID comme ceci est utilisé ici. Mais si ce n'est pas quelque chose que vous prévoyez d'utiliser avec votre table, vous pouvez faire ce que vous voulez!

+0

Merci! Mais je pense que je vais avoir besoin d'un CursorAdapter, donc je dois avoir un nombre entier hein. d'accord acclamations. Puis-je avoir l'INT _ID mais pas vraiment l'utiliser, c'est-à-dire, il est possible pour moi de dire "récupérer tout le dossier où cette colonne TEXT est ==" Food "n'est pas vraiment important, merci pour l'aide! – Holly

0

_id doit être de type int dans sqlite create (long en Java). Diverses classes supposent cela. Par conséquent, vous ne pouvez pas utiliser UUID pour la clé primaire.

Questions connexes