Получить последнее вставленное значение из базы данных sqlite Android

Я пытаюсь получить последний вставленный rowid из базы данных sqlite в Android. Я прочитал много сообщений об этом, но не могу заставить его работать. Это мой метод:

public Cursor getLastId() { return mDb.query(DATABASE_TABLE, new String[] {KEY_WID}, KEY_WID + "=" + MAX(_id), null, null, null, null, null);} 

Я пробовал с MAX, но я должен использовать его неправильно. Есть ли другой способ?

На самом деле класс SQLiteDatabase имеет свой собственный метод insert, который возвращает идентификатор вновь созданной строки. Я думаю, что это лучший способ получить новый идентификатор. Здесь вы можете проверить его документацию.

Надеюсь, это поможет.

использование

  SELECT last_insert_rowid(); 

Чтобы получить последний вставленный rowid. Если вы используете ключевое слово AUTOINCREMENT тогда

 SELECT * from SQLITE_SEQUENCE; 

Скажет вам значения для каждой таблицы.

Чтобы получить последнюю строку из таблицы.

 Cursor cursor = theDatabase.query(DATABASE_TABLE, columns,null, null, null, null, null); cursor.moveToLast(); 

Если вы хотите, чтобы last_insert_id просто вставлял вставку, вы можете использовать это:

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

Попробуй это:

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

Используйте moveToLast() в интерфейсе Cursor .

От 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(); 

Простой пример:

 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 } 

Или вы можете получить последнюю строку при вставке (что упоминает @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 

Также их несколько способов сделать это с помощью запроса:

  1. Один из них выражается @DiegoTorresMilano
  2. SELECT MAX(id) FROM table_name . Или для получения всех значений столбцов SELECT * FROM table_name WHERE id = (SELECT MAX(id) FROM table_name) .
  3. Если ваш PRiMARY KEY сидит в AUTOINCREMENT , вы можете SELECT vaules использовать max до min и ограничивать строки до 1, используя SELECT id FROM table ORDER BY column DESC LIMIT 1 (Если вы хотите каждое значение, используйте * вместо id )

Метод insert возвращает идентификатор только что вставленной строки или -1, если во время вставки была ошибка.

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

Db – это экземпляр вашей SQLiteDatabase.