2010-11-30 15 views
8

Esta es probablemente una pregunta tonta, pero todavía no he podido encontrar la respuesta.¿Debo usar _ID como clave principal de SQlite? y tiene que ser una INT? (Android Dev)

Quiero usar una columna TEXTO con mis propios nombres únicos como la clave principal en una tabla. la pequeña sección de código para definir esto se ve algo como esto en mi proyecto:

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

Será este trabajo como tengo la intención? ¿O quizás necesito usar "AS ID"? Solo veo tablas únicas con _ID como un entero autoincrementing. También esto fue una clave foránea en otra tabla, pero desde que diseñé mi base de datos, he leído más información y no estoy seguro de que eso realmente importe. android & SQLITE?

Gracias a los carteles de abajo pero soy un poco lento y no estoy seguro de si estoy aplicando la información correctamente, ¿podría verificarlo?

lo que si tengo una declaración de crear de esta manera:

"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);" 

Entonces tener: db.execSQL ("SELECT ID, ID AS CAT_ITEM_ID")

Puedo luego usarlos indistintamente? ¿estoy cerca de cerca? jaja, lo siento, estoy intentando!

Respuesta

12

Puede crear y definir tablas como lo desee, pero si tendrá que usar la tabla mediante un CursorAdapter que no funcionará sin una modificación.

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

Siempre se debe emitir una select col1 as _id ... para trabajar.

Por lo tanto, se recomienda utilizar _id en el esquema de la tabla, y si desea utilizar con algún otro nombre, puede hacerlo. select _id, _id as customname ... así que seleccione la columna _id dos veces con diferentes nombres.

+0

Gracias por la respuesta! Pero todavía estoy un poco lento, me temo, si pudiera verificar el uso de sus consejos en mi publicación original, realmente lo agradecería! – Holly

+0

Su código se ve bien, pero el campo debe ser '_ID' y no' ID' – Pentium10

3

Puede tener todo lo que desee como clave principal.

Pero si, por ejemplo, desea utilizar un CursorAdapter que muestre automáticamente elementos de una consulta de Cursor, debe tener una columna entera llamada _ID, ya que se utiliza aquí.

Pero si esto no es algo que planee usar con su mesa, ¡puede hacer lo que quiera!

+0

Gracias! Pero creo que necesitaré un CursorAdapter, así que tengo que tener un entero, ¿eh? bien vivas ¿Puedo tener el _ID INT pero no realmente usarlo, es decir, es posible para mí decir "recuperar el registro completo donde esta columna TEXTO es ==" Comida "¿verdad? No importa de todos modos gracias por la ayuda! – Holly

0

_id debe ser del tipo int en sqlite create (long en Java). Varias clases asumen eso. Como resultado, no puede usar UUID para clave primaria.

Cuestiones relacionadas