Obtener el último valor insertado de la base de datos sqlite Android

Estoy tratando de obtener el último rowid insertado de una base de datos sqlite en Android. He leído un montón de publicaciones al respecto, pero no puedo hacer que una funcione. 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);} 

Lo he intentado con MAX, pero debo usarlo 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 la nueva identificación. Puede consultar su documentación aquí .

Espero que esto ayude.

Utilizar

  SELECT last_insert_rowid(); 

para obtener el último rowid insertado. Si usa la palabra clave AUTOINCREMENT ,

 SELECT * from SQLITE_SEQUENCE; 

le dirá 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 solo afert a una inserción, puede usar eso:

 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; } 

Use moveToLast() en la interfaz del Cursor .

De android.googlesource.com

 /** * Move the cursor to the last row. * * 

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 se inserta (que ha mencionado @GorgiRankovski):

 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 su es una forma múltiple de hacerlo con la consulta:

  1. Uno es expresado por @DiegoTorresMilano
  2. SELECT MAX(id) FROM table_name . o para obtener todos los valores de 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 para máximo a mínimo y limitar las filas a 1 usando SELECT id FROM table ORDER BY column DESC LIMIT 1 (Si quiere todos y cada uno de los valores, use * lugar de id )

El método insert devuelve el ID de la fila que acaba de insertarse o -1 si hubo un error durante la inserción.

 long id = db.insert("your insertion statement"); 

db es una instancia de su SQLiteDatabase.