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?

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:

  1. Uno es expresado por @DiegoTorresMilano
  2. SELECT MAX(id) FROM table_name . O para obtener todos los valores de las columnas SELECT * FROM table_name WHERE id = (SELECT MAX(id) FROM table_name) .
  3. Si su PRiMARY KEY ha sentado a AUTOINCREMENT , puede SELECT vaules ocurriendo de max a min y limitar las filas a 1 usando SELECT id FROM table ORDER BY column DESC LIMIT 1 (Si desea cada valor, utilice * lugar de id )

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.

  • La restricción de Android Room FOREIGN KEY falló
  • Seleccione un primer carácter distinto basado en la columna de cadena
  • Android - cómo utilizar "select last_insert_rowid ();"
  • Adición de filas a una base de datos sqlite mediante un bucle (Phonegap)
  • Excepción "tabla ... no tiene columna nombrada ..."
  • Cómo eliminar todos los elementos de SQLite en Android
  • ¿Cómo carga todos los campos de una base de datos y ordeno el resultado después de una fila con GreenDao?
  • Android - ¿Cuándo insertaOrThrow () lanzar una excepción?
  • ¿Cuál es el uso de SQLiteDatabase.CursorFactory en Android?
  • Recibo frecuentemente SQLiteDoneException al consultar un valor, ¿por qué?
  • Ormlite leer Fecha como 'yyyy-MM-dd'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.