这就是我用于插入的内容:
public long insert(String content, Date startAt, Date endAt) {
if (content == null || startAt == null) {
return 0;
}
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_CONTENT, content);
contentValues.put(KEY_START_AT, startAt.getTime());
if (endAt == null) {
contentValues.putNull(KEY_END_AT);
} else {
contentValues.put(KEY_END_AT, endAt.getTime());
}
return sqLiteDatabase.insert(TABLE_NAME, null, contentValues);
}
现在我想创建更新方法,它将更新最后插入的行。我怎样才能获得最后一行?
答案 0 :(得分:1)
您可以使用cursor
检索行并说:
cursor.moveToLast();
OR
cursor.moveToPosition(cursor.getCount() - 1);
答案 1 :(得分:1)
如果您有一个用作主键的id属性,则可以在SqlLite上执行原始数据库查询。
Cursor cc = this.mDb.rawQuery("SELECT *" + " FROM " + "<Your DATABASE_NAME> " +
"ORDER BY id " + "DESC LIMIT 1", null);
return cc;
下面, 1.它返回一个光标。 2. mDb是一个SQLiteDatabase类实例。 3. ORDER BY id允许查询按ID号排序。正如我所说,如果您的表中有一个id作为主键,那么您的最新条目将具有最大ID号。 4. DESC允许按降序排序。 5. LIMIT 1只允许返回1行。 6.在编写原始查询时要小心,当你不仔细处理它们时,查询中的空格会很麻烦。
有关更多查询,请参阅this教程。显然Divya的答案也很好。
答案 2 :(得分:0)
当您向表中插入行时,insert查询将返回最后插入行的键。您现在可以使用此密钥更新此行。
例如
int newInsertedKey = sqLiteDatabase.insert(TABLE_NAME,null,contentValues);
更新table_name set column_name ='更改2',其中columnID = newInsertedKey
一种有效的方法是避免再有数据库查询获取最后更新的行。
答案 3 :(得分:0)
也许他应该使用这样的东西
public long getLastId() {
Cursor c = mDb.query(currentTableName, new String[] { "MAX(_id)" },
null, null, null, null, null, null);
try{
c.moveToFirst();
long id = c.getLong(0);
return id;
}catch(Exception e){
return 0;
}
}
其中_id是用于标识行的列