마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android SQlite primary key 재정렬 쿼리문 vacuum

0 추천
안드로이드에서 SQlite를 이용해서 데이터를 저장 중입니다.
ID NAME
1  사자
2  호랑이
3  돼지
저장된 데이터가 있으면 위와 같이 있으면 
2번을 삭제후 _id 값을 재 정렬하고 싶은데
ID NAME
1  사자
2  돼지 
이런식으로 재정렬해야 하는데 vacuum 하면
primary key 값이 다시 정렬된다고 하는데
아래와 같이입력해도 재정렬이 되지 않습니다.
삭제 시나 데이터를 조회할때 id 값을 이용해서 불러오고
리스트뷰와 같이 연동이 되 있어서 정렬된 id값이 필요합니다.
조언 좀 부탁드리겠습니다.
MySQLiteOpenHelper helper;
SQLiteDatabase db;
db = helper.getReadableDatabase();
String sql = "VACUUM";
db.execSQL(sql);
민킹 (590 포인트) 님이 2014년 4월 29일 질문
민킹님이 2014년 4월 29일 수정
id를 재정렬하는 이유가 있나요? 보통 id값은 안건드리거든요. 일관된 순서가 필요하면 목록을 표시하는 화면에서 순서를 주는게 어때요?
리스트뷰를 이용해서 삭제/실행할때 ID 이용하고 있어요
리스트뷰 position 값은 삭제되면 다시 초기화되는데
SQLite ID값은 그대로 라서 번호가 틀리다보니 삭제가 안되네요
재 정렬이 가능하다면 ID로 삭제하는 방법이 좋은거 같아서요
안드로이드 SQLite에서는 재정렬이 안되나요?
position말고 id를 가져와서 작업하는게 더 쉽지 않아요?
리스트뷰 id를 말씀하시는건가요?
지금은 리스트뷰 positon값으로 Sqlite primary id 값에 대입해서 삭제하는 방식이에요
각 row마다 db의 row id를 갖고 올텐데, 그 값으로 지우면 안되는건가요?
row id가 있으면 그 방법이 좋겠네요 감사합니다.
row id는 삭제되면 바로 id값이 갱신되나요?
row id로 db에서 삭제하고, 리스트뷰는 다시 refresh 하던가 수동으로 row 하나만 목록에서 빼던가 해야죠
네 지금도 리스트뷰는 수동으로 삭제하고 id로 db를 삭제하는데
id 값이 삭제가 되도 1,2,3번중 2번을 삭제해도
2번은 비여 있고 1,3번이 그대로 남아있고 반면에
리스트뷰 position은 1,2,3번에서 2번은 지우면 2번자리에 3번이 올라가고 1,2번이 되는데 이렇다 보니 선택시 position값과 id값이 틀리다보니
삭제가 안되고 있어요
ArrayList<MyItem> mItems = new ArrayList<MyItem>();
mItems = myTable.load();
.
.

// item 클릭했을 때
MyItem item = mItems.get(position);
myTable.delete(item.rowId);

이런 식으로 하면 되는거 아닌가요? position이랑 rowID는 아무 상관이 없어요
답변감사드려요~ DB에서 받아올때 id 함께 받아서
삭제하는 방법으로 해결했어요 감사드립니다~

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...