从表的底部到顶部运行SQLite查询

时间:2014-12-25 20:53:31

标签: android sqlite

对于初始_id值大于21的所有记录,我试图将Android SQLite数据库表的主整数键字段(_id)递增1。

我尝试了以下内容:

UPDATE tableName SET _id = _id+1 WHERE _id > 21

但是在完成对表的第一次更新(更改22到23)后,有2条记录,其中_id = 23.这会产生错误。有没有办法通过从最后一条记录到第一条记录运行这个过程而不是从顶层开始来避免这个问题?

反向过程:当{id = 21不存在时,UPDATE tableName SET _id = _id-1 WHERE _id > 21无误地工作,因此第一个语句的问题肯定与id的加倍有关。

我正在尝试使用DESC排序来解决这个问题。我当前的代码如下,但它不是正确的语法,这只会增加最后一条记录:

UPDATE tableName SET _id = _id+1 WHERE _id = (SELECT _id FROM tableName WHERE _id > 21 ORDER BY _id DESC)

1 个答案:

答案 0 :(得分:0)

您可以先获取降序记录然后更新它们

    // query
    String sql = "SELECT _id FROM tableName WHERE _id > 21 ORDER BY _id DESC";

    db = this.getWritableDatabase();

    Cursor cursor = db
            .rawQuery(sql, null);

    if (cursor.moveToFirst()) {

        do {

            int id = cursor.getInt(cursor.getColumnIndex("_id"));

            // update related record

        } while (cursor.moveToNext());
    }