Acerca del campo "_id" en Android SQLite
Es el campo "_id" necesario en Android SQLite?
- Cómo establecer una columna como indexador único en Sqlite
- ¿Cómo puedo insertar una comilla doble (") en el campo Varchar de la base de datos SQLite?
- NoClassDefFoundError al usar greenDao
- El método SQLite .query (), la cláusula WHERE solo toma cadenas de comillas dobles
- ¿Cómo comunicarse entre WebView y JavaScript?
- SQLite - insertar una cadena con nuevas líneas en la base de datos desde el archivo csv
- La base de datos Sqlite onUpgrade () no se llama
- Obtención de base de datos SQLite por adb shell en cmd
- SQLite ExecSql no funciona desde el archivo
- Resolución de conflictos en la base de datos SQLite de Android
- Actualizar consulta sqlite - Android
- OnCreate () no es llamado por getWritableDatabase ()
- Cómo utilizar join consulta en CursorLoader cuando su constructor no lo admite
_id es útil cuando se utilizan los adaptadores mejorados que hacen uso de un cursor (por ejemplo, ResourceCursorAdapter). Es utilizado por estos adaptadores para proporcionar una ID que se puede utilizar para referirse a la fila específica en la tabla que relaciona el elemento en lo que el adaptador se está utilizando para (por ejemplo, una fila en un ListView).
No es necesario si no vas a usar clases que necesitan una columna _id en un cursor, y también puedes usar "as _id" para hacer que aparezca otra columna como si se llamara _id en tu cursor.
¿Por qué no hacer uso de _ROWID_ ?
SQLite proporciona esto de todos modos para cada fila, por lo que sólo puede alias a _id en su declaración de selección.
Técnicamente no el campo _id
no es necesario, sin embargo, si está haciendo uso de la clase CursorAdapter
(que probablemente lo son, especialmente si está trabajando con el ejemplo del Bloc de notas), entonces sí
"El Cursor debe incluir una columna llamada" _id "o esta clase no funcionará"
Como se explica en la documentación aquí . Lamentablemente, los ejemplos de código no lo hacen muy claro.
Es muy conveniente en muchos casos tener un campo id. Prefiero que el mío se auto-incremente (como se muestra a continuación). Siempre estoy encontrando nuevos usos para el campo id 🙂
Cuando llega el momento de adjuntar los datos a un adaptador, me gusta usar un alias de nombre de tabla para consultar el campo id como _id
. Ejemplo: SELECT id _id, msg from message order by id
. De esa manera el adaptador ve un campo llamado _id
y todo el mundo está feliz.
He aquí un ejemplo de cómo defino mis tablas:
CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);
De los documentos oficiales …
El Cursor debe incluir una columna llamada "_id" o esta clase no funcionará. Además, utilizar MergeCursor con esta clase no funcionará si los Cursores combinados tienen valores superpuestos en sus columnas "_id".
Y el Cursor
es:
Esta interfaz proporciona acceso de lectura-escritura aleatorio al conjunto de resultados devuelto por una consulta de base de datos.
En otras palabras, necesitas _id
para Android SQLite (que usualmente usa Cursor)
Si define su columna _id como un entero autoincrementador, en realidad es un alias para la columna ROWID que SQLite proporciona de forma predeterminada ( https://www.sqlite.org/lang_createtable.html#rowid ).
Su declaración de creación necesita tomar la forma …
CREATE TABLE t(_id INTEGER PRIMARY KEY ASC, y, z);
Para probar esto funciona …
UPDATE t SET _id=22 WHERE _id=11;
entonces
SELECT ROWID, _id FROM t;
Y encontrarás que _id
y ROWID
tienen el mismo valor.
Tenga en cuenta que si utiliza DESC en CREATE se crea una nueva columna y ROWID
no tiene alias.
Seguramente no. Es un campo de conveniencia que algunos widgets como ListView utiliza para rellenar datos. Vea este buen artículo: http://www.casarini.org/blog/2009/android-contentprovider-on-sqlite-tables-without-the-_id-column/
Por supuesto, si está creando su propio widget de interfaz de usuario y su propio adaptador, no tiene que nombre su clave principal como "_id". Puede ser cualquier nombre que desee. Pero usted sería responsable de administrar sus colecciones de widgets de interfaz de usuario y vincularlos a la fila derecha en su base de datos. "_id" sólo es útil para ListView como Brad ha señalado.
- Android 4.0, el texto en la barra de acción NUNCA muestra
- Proteger contra revisiones falsas en Google Play