안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 제목 그대로 레코드 추가시 _id 값이 테이블에 하나씩 자동증가되고
입력 받은 값이 _id값에 따라 하나씩 추가 되는것으로 알고있습니다.
ContentValues initialValues = new ContentValues();
initialValues.put(SheetTableAttribs[0], title);
return mDb.insertOrThrow(SHEET_TABLE, null, initialValues);
위와 같은 함수로 레코드를 추가시켜주고, adb로 직접 들어가 테이블 내용을 확인해보았더니 잘 들어가는듯 합니다.
1:111
2:222
3:333
그런다음 3번부터 역으로 지워주기 시작했습니다.
return mDb.delete(SHEET_TABLE, DataTableAttribs[0] + "=" + rowId, null) > 0;
물론 db테이블도
select * from tablename;으로 확인해 보았구요.
1:111
2:222 와 같이 잘 줄어듭니다.
이런식으로 다 지운다음 다시 레코드를 3개 추가 시켰더니..
4:111
5:222
6:333
이런식으로 됩니다. 레코드 삭제시 _id값은 1부터 다시 시작되어야 하는것 같은데
저는 _id값으로 레코드를 찾아서 지우기 때문에요..
왜 이런 현상이 나타나는지 모르겠습니다. ㅠㅠ sqlite를 잘몰라서
아시는분 도움 좀 부탁드립니다.
2009.09.24 21:58:44
참고로 전 안드로이드 잘 모릅니다 -_-; 일반 DB라고 생각하고 말씀드립니다.
auto increase 속성을 제거 하시면 됩니다. auto increase를 제거하는건 DB마다 명령어가 조금씩 다를수 있습니다.
그리고 _ID에는 자동으로 들어가던 값이 변경하게 되면 입력할때마다 최대값을 찾아서 해당 필드에 넣어주는 작업을 하셔야할겁니다만, 별로 추천하고 싶은 방식은 아닙니다.
혹시라도 관계형DB라서 다른 테이블과 조인하거나 한다면, 처리를 조금이라도 허술하게 하면 기존자료와 엉켜버리는 현상이 발생할수도 있기 때문에, id값은 항상 무조건 증가하게 되어있는겁니다.
auto increase 속성을 제거 하시면 됩니다. auto increase를 제거하는건 DB마다 명령어가 조금씩 다를수 있습니다.
그리고 _ID에는 자동으로 들어가던 값이 변경하게 되면 입력할때마다 최대값을 찾아서 해당 필드에 넣어주는 작업을 하셔야할겁니다만, 별로 추천하고 싶은 방식은 아닙니다.
혹시라도 관계형DB라서 다른 테이블과 조인하거나 한다면, 처리를 조금이라도 허술하게 하면 기존자료와 엉켜버리는 현상이 발생할수도 있기 때문에, id값은 항상 무조건 증가하게 되어있는겁니다.