2014-12-25 17 views
0

我想將初始_id值大於21的所有記錄的Android SQLite數據庫表的主整數鍵字段(_id)增加1。從表底部到頂部運行SQLite查詢

我曾嘗試以下:

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

但是在完成第一次更新表(改變22〜23),有2個記錄用_id = 23這產生一個錯誤。通過從最後一個記錄到第一個記錄運行此過程而不是從頂部開始,有沒有辦法避免這個問題?

反過程:UPDATE tableName SET _id = _id-1 WHERE _id > 21當_id = 21不存在時無錯誤地工作,所以第一條語句的問題肯定與雙倍的ID有關。

我正在嘗試使用DESC命令來解決此問題。我當前的代碼是下面的,但它不是正確的語法,這只是增加了最後一條記錄:

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

+1

爲什麼你需要更新一個ID? – laalto

+0

首先獲取記錄DESC並在循環中更新它們。 –

+0

@laalto - 由於記錄被刪除,數據庫中存在缺口,我需要將數據庫ID作爲其他幾段代碼的連續數字才能正常工作。 –

回答

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()); 
    } 
+0

我一直在尋找一種SQLite的方式來做到這一點,而不是一種Java方式,但我想這足夠好,因爲我只需要爲每個用戶做一次。 –

相關問題