Leí en las especificaciones. "Devuelve: el ID de fila de la fila recién insertada, o -1 si se produjo un error" ¿el rowId es el mismo que mi campo generado "id autoincrement de clave primaria"?
Marcos Vasconcelos
29
Si, es lo mismo.
GrAnd
3
@GrAnd, pero ¿qué pasa si elimino algunas filas "inicio-medio" en mi tabla, así que rompo la secuencia de n-ésimas filas con id = n generado. ¿La ID de fila devuelta seguirá siendo la misma que la ID de incremento automático generada?
Desconocido Joe el
1
¿Qué sucede si necesita hacer INSERTAR O ACTUALIZAR y obtener la identificación?
Timo
1
@UnknownJoe Sé que esta es una publicación anterior. Pero puede ser útil para alguien. El ID de fila y el ID autoincrementado serán los mismos, incluso si se eliminan del medio.
Raj kannan Iyyappan
8
Si usa ContentValues:
DBHelper db =newDBHelper();// your dbHelperContentValues values =newContentValues();
values.put("firstName","Ahmad");
values.put("lastName","Aghazadeh");long insertedId= db.getSQLiteDatabase().insert("user","", values);
Si el exec de consulta usa select last_insert_rowid()
String sql ="INSERT INTO [user](firstName,lastName) VALUES (\"Ahmad\",\"Aghazadeh\"); select last_insert_rowid()";DBHelper itemType =newDBHelper();// your dbHelper
c = db.rawQuery(sql,null);if(c.moveToFirst())
result = c.getLong(0);
Revisé las fuentes.
insertEl método utiliza la sqlite3_last_insert_rowidfunción para devolver una identificación. De acuerdo con la documentación: https://www.sqlite.org/c3ref/last_insert_rowid.html
El ID de la fila es la columna oculta o una columna de tipo INTEGER PRIMARY KEYsi se declara.
Cada entrada en la mayoría de las tablas de SQLite (a excepción de WITHOUT ROWIDlas tablas) tiene una única de 64 bits entero de clave llamado el " rowid ". El rowid siempre está disponible como una columna no declarada llamada ROWID, OID o _ROWID_ siempre que esos nombres no sean utilizados también por columnas declaradas explícitamente. Si la tabla tiene una columna de tipoINTEGER PRIMARY KEY , esa columna es otro alias para el rowid .
Por lo general, esa es la _IDcolumna predeterminada
Tuve bastantes problemas con esto en mySQL, LAST_INSERT_ID no es una forma confiable de obtener la ID, si tiene usuarios que manipulan la base de datos, la ID devuelta puede no ser la ID que fue insertada por la consulta que ha ejecutado, varios otros usuarios pueden afectar el regreso de esta identificación. Teníamos un servidor con un promedio de 7000 usuarios por minuto y siempre tropezaba.
La solución que teníamos era utilizar los datos de la consulta que insertó y luego buscar ese resultado utilizando esos datos. Estás haciendo una solicitud buscando la última identificación de todos modos. Por lo tanto, también puede hacer una tabla SELECT id FROM donde field = var y field = var para obtener la identificación. Es un pequeño golpe de rendimiento en la consulta, pero se obtuvo un resultado mucho más confiable.
Si usa ContentValues:
Si el exec de consulta usa
select last_insert_rowid()
Si usa la habitación
fuente
Revisé las fuentes.
insert
El método utiliza lasqlite3_last_insert_rowid
función para devolver una identificación. De acuerdo con la documentación: https://www.sqlite.org/c3ref/last_insert_rowid.html El ID de la fila es la columna oculta o una columna de tipoINTEGER PRIMARY KEY
si se declara.Por lo general, esa es la
_ID
columna predeterminadafuente
Tuve bastantes problemas con esto en mySQL, LAST_INSERT_ID no es una forma confiable de obtener la ID, si tiene usuarios que manipulan la base de datos, la ID devuelta puede no ser la ID que fue insertada por la consulta que ha ejecutado, varios otros usuarios pueden afectar el regreso de esta identificación. Teníamos un servidor con un promedio de 7000 usuarios por minuto y siempre tropezaba.
La solución que teníamos era utilizar los datos de la consulta que insertó y luego buscar ese resultado utilizando esos datos. Estás haciendo una solicitud buscando la última identificación de todos modos. Por lo tanto, también puede hacer una tabla SELECT id FROM donde field = var y field = var para obtener la identificación. Es un pequeño golpe de rendimiento en la consulta, pero se obtuvo un resultado mucho más confiable.
fuente
Simplemente se puede obtener la última fila insertada _id usando
last_insert_rowid()
. El código de muestra es el siguiente.fuente