Подтвердить что ты не робот

Получить последнее вставленное значение из базы данных 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, но я должен использовать его неправильно. Есть ли другой способ?

4b9b3361

Ответ 1

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

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

Ответ 2

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

 SELECT last_insert_rowid();

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

SELECT * from SQLITE_SEQUENCE;

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

Ответ 3

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

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

Ответ 4

Если вы хотите, чтобы 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);
}

Ответ 5

Попробуйте следующее:

public Cursor getLastId() {
        return mDb.query(DATABASE_TABLE, new String[] { **MAX(id)** }, null, null, null, null, null, null);}

Ответ 6

/**
 * @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;
}

Ответ 7

Используйте 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 

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

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

Ответ 8

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

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

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