DB에 항목을 집어넣고 random값을 통해 rowid를 결정하여 그 곳에 있는 값을 가져 오는 방식을 사용하고 있습니다.


값은 insert와 delete 모두 가능한데


random으로 접근하기 때문에 rowid는 항상 오름차순이어야 합니다.


중간에 값이 비면 오류가 생겨요


이 때문에 인터넷을 찾아보니 전체를 drop하고 다시 만들어야 한다는 이야기와 vacuum을 쓰면 된다는 이야기가 있어서


저는 vacuum을 사용하여 해결하려고 하였습니다.


 public void delete(long rowid) {
	mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowid, null);
	mDb.execSQL("VACUUM");
}


위와 같이 delete하는 함수 내에서 rowid에 해당하는 데이터를 삭제한 뒤에 vacuum을 실행시켰는데 동작하지 않습니다.


삭제한 행 외의 다른 행을 랜덤으로 접근할 때에는 동작에서는 문제가 없고


vacuum에 대한 오류메시지는 뜨지 않고 단지 db에서 접근이 잘못되었다고 오류가 뜹니다.



예를들어


(rowid / value)

1 a

2 b

3 c

4 d

5 e


이렇게 순서대로 넣은 후


3 c를 삭제하면


a, b, d, e


위와같이 개수는 4개가 있다는건 인식을 하는데


d를 3번으로 인식하지는 못합니다.


3번을 인식하려고 하면 index 0 requested with a size of 0 오류가 뜹니다.


또한 3번으로 인식 할 때 나와야 할 d가 4번으로 인식되어 나옵니다.


삭제된 c가 vacuum으로 정리가 안되어서 접근 하려고 할 때 오류가 생기는거 같아요


rowid의 컬럼명은 _id로 주었습니다.


KEY_ROWID = "_id"

_id integer primary key


혹시 문제점이나 추가로 설정해야 하는 부분이 있는가요?