Obtener el último valor insertado de sqlite database Android
Estoy tratando de obtener el último rowid insertado de una base de datos sqlite en Android. He leído un montón de artículos sobre él, pero no puedo conseguir uno para trabajar. Este es mi método:
public Cursor getLastId() { return mDb.query(DATABASE_TABLE, new String[] {KEY_WID}, KEY_WID + "=" + MAX(_id), null, null, null, null, null);}
He intentado con MAX, pero debo estar usando mal. ¿Hay otra manera?
- Parámetros de Android SQLite rawquery
- Android: Sugar ORM No hay tal excepción de tabla
- ¿Por qué INSERTs y UPDATEs son más lentos en Android 4.0?
- Android - ¿Dónde está la base de datos SQLite almacenada
- Android - SQLite Cursor getColumnIndex () es sensible a mayúsculas y minúsculas?
- ¿Cuál es la manera de insertar un enorme JSON datos en un DB de SQLite en android
- Buscar sugerencias de diferentes tablas en diferentes actividades
- Actualizar consulta sqlite - Android
- Calcular la distancia entre dos puntos directamente en SQLite
- Cómo persistir el permiso en android API 19 (KitKat)?
- SQLite: forma eficiente de eliminar lotes de filas
- ¿Es seguro almacenar nombre de usuario y contraseñas en un SQLite local db en Android?
- Cómo organizar mejor mi clase de base de datos SQLite en Android
Bueno, en realidad, la clase SQLiteDatabase tiene su propio método de inserción que devuelve el ID de la fila recién creada. Creo que esta es la mejor manera de obtener el nuevo ID. Puede consultar su documentación aquí .
Espero que esto ayude.
Utilizar
SELECT last_insert_rowid();
Para obtener el último rowid insertado. Si utiliza la palabra clave AUTOINCREMENT
entonces
SELECT * from SQLITE_SEQUENCE;
Le indicará los valores para cada tabla.
Para obtener la última fila de la tabla ..
Cursor cursor = theDatabase.query(DATABASE_TABLE, columns,null, null, null, null, null); cursor.moveToLast();
Si desea que last_insert_id sólo afert un inserto, puede usarlo:
public long insert(String table, String[] fields, String[] vals ) { String nullColumnHack = null; ContentValues values = new ContentValues(); for (int i = 0; i < fields.length; i++) { values.put(fields[i], vals[i]); } return myDataBase.insert(table, nullColumnHack, values); }
Prueba esto:
public Cursor getLastId() { return mDb.query(DATABASE_TABLE, new String[] { **MAX(id)** }, null, null, null, null, null, null);}
/** * @return */ public long getLastInsertId() { long index = 0; SQLiteDatabase sdb = getReadableDatabase(); Cursor cursor = sdb.query( "sqlite_sequence", new String[]{"seq"}, "name = ?", new String[]{TABLENAME}, null, null, null, null ); if (cursor.moveToFirst()) { index = cursor.getLong(cursor.getColumnIndex("seq")); } cursor.close(); return index; }
Utilice moveToLast()
en la interfaz del Cursor
.
Desde android.googlesource.com
/** * Move the cursor to the last row. * * <p>This method will return false if the cursor is empty. * * @return whether the move succeeded. */ boolean moveToLast();
Ejemplo simple:
final static String TABLE_NAME = "table_name"; String name; int id; //.... Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); if(cursor.moveToLast()){ //name = cursor.getString(column_index);//to get other values id = cursor.getInt(0);//to get id, 0 is the column index }
O puede obtener la última fila cuando la inserción (que es @GorgiRankovski han mencionado):
long row = 0;//to get last row //..... SQLiteDatabase db= this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_NAME, name); row = db.insert(TABLE_NAME, null, contentValues); //insert() returns the row ID of the newly inserted row, or -1 if an error occurred
También es una forma múltiple de hacerlo mediante la consulta:
- Uno es expresado por @DiegoTorresMilano
-
SELECT MAX(id) FROM table_name
. O para obtener todos los valores de las columnasSELECT * FROM table_name WHERE id = (SELECT MAX(id) FROM table_name)
. - Si su
PRiMARY KEY
ha sentado aAUTOINCREMENT
, puedeSELECT
vaules ocurriendo de max a min y limitar las filas a 1 usandoSELECT id FROM table ORDER BY column DESC LIMIT 1
(Si desea cada valor, utilice*
lugar deid
)
El método insert devuelve el id de la fila insertada o -1 si hubo un error durante la inserción.
long id = db.insert("your insertion statement");
Db es una instancia de su SQLiteDatabase.
- Precisión de MediaPlayer.seekTo (int msecs)
- Grabación de llamadas – hacer que funcione en Nexus 5X (posible ROM o ROM personalizado)