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