Android Sqlite更新最后插入的行

时间:2013-03-06 12:46:22

标签: android

这就是我用于插入的内容:

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

现在我想创建更新方法,它将更新最后插入的行。我怎样才能获得最后一行?

4 个答案:

答案 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是用于标识行的列