我正在尝试从Android中的sqlite数据库中获取最后一个插入的rowid。我已经阅读了很多关于它的帖子,但是无法让它工作。 这是我的方法:
public Cursor getLastId() {
return mDb.query(DATABASE_TABLE, new String[] {KEY_WID}, KEY_WID + "=" + MAX(_id), null, null, null, null, null);}
我尝试过MAX,但我一定是错了。还有另一种方式吗?
答案 0 :(得分:64)
实际上,SQLiteDatabase类有自己的insert方法,它返回新创建的行的id。我认为这是获取新ID的最佳方式。 您可以查看其文档here。
我希望这会有所帮助。
答案 1 :(得分:25)
使用
SELECT last_insert_rowid();
获取最后插入的rowid。
如果您使用AUTOINCREMENT
关键字,那么
SELECT * from SQLITE_SEQUENCE;
将告诉您每个表的值。
答案 2 :(得分:13)
从表中获取最后一行..
Cursor cursor = theDatabase.query(DATABASE_TABLE, columns,null, null, null, null, null);
cursor.moveToLast();
答案 3 :(得分:2)
如果您想在插入后立即使用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);
}
答案 4 :(得分:1)
试试这个:
public Cursor getLastId() {
return mDb.query(DATABASE_TABLE, new String[] { **MAX(id)** }, null, null, null, null, null, null);}
答案 5 :(得分:1)
/**
* @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;
}
答案 6 :(得分:1)
在moveToLast()
界面中使用Cursor
。
/**
* 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
他们使用查询可以通过多种方式执行此操作:
SELECT MAX(id) FROM table_name
。或获取所有列值SELECT * FROM table_name WHERE id = (SELECT MAX(id) FROM table_name)
。PRiMARY KEY
已经坐到AUTOINCREMENT
,则SELECT
可以将最大值设置为最小值,并使用SELECT id FROM table ORDER BY column DESC LIMIT 1
将行限制为1
(如果您想要每个值,请使用*
代替id
) 答案 7 :(得分:0)
insert方法返回刚刚插入的行的id,如果在插入过程中出现错误,则返回-1。
long id = db.insert("your insertion statement");
db是SQLiteDatabase的一个实例。
答案 8 :(得分:0)
我用这个
public int lastId(){
SQLiteDatabase db =
this.getReadableDatabase();
Cursor res = db.rawQuery( "select * from resep", null );
res.moveToLast();
return res.getInt(0);
}
答案 9 :(得分:0)
在您的 DbHelper 类中,
public long getLastIdFromMyTable()
{
SQLiteDatabase db = this.getReadableDatabase();
SQLiteStatement st = db.compileStatement("SELECT last_insert_rowid() from " + MY_TABLE);
return st.simpleQueryForLong();
}