2014-12-25 4 views
0

초기 _id 값이 21보다 큰 모든 레코드에 대해 Android SQLite 데이터베이스 테이블의 기본 정수 키 필드 (_id)를 1 씩 늘리려고합니다.테이블 아래쪽에서 위쪽으로 SQLite 쿼리 실행

나는 다음과 같은 시도 :

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

그러나 테이블에 첫 번째 업데이트 완료시, _id = (23)이 오류를 생성 2 개 기록이있다 (23-22 변경). 이 프로세스를 마지막 레코드에서 맨 처음으로 실행하여 문제를 피할 수있는 방법이 있습니까?

반대 프로세스 : 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 방식을 찾고있었습니다.하지만 각 사용자마다이 작업을 한 번만 수행하면됩니다. –

관련 문제