안녕하세요.
SQLite를 연습하기위해 일기장과 비슷한 기능을 하는 어플리케이션을 개발하고 있습니다.
table은 접근하기 위한 index와 일기의 내용을 저장할 수 있도록 두 개의 칼럼으로 구성했습니다.
sqLiteDatabase.execSQL("create table if not exists write_table ( " +
"tbl_index integer PRIMARY KEY," +
"substance text not null);");
사용자가 일기를 작성하고 완료 버튼을 누르면, 작성한 일기를 위 DB에 넣습니다. 이 때의 tbl_index는 select tbl_index from write_table 해서 커서를 맨 끝으로 넘겨 index를 정해줍니다.
그리고, 사용자가 작성한 일기의 첫 줄을 리스트뷰를 통해 볼 수 있습니다. 리스트뷰에서 띄워주는 첫 글을 보고, 사용자가 모든 일기의 내용을 보고 싶어 해당 리스트를 클릭하면 클릭한 리스트의 포지션값으로 localDB의 index 칼럼과 일치한 데이터를 보여줍니다.
이제 그 리스트뷰에서 삭제하고 싶은 리스트를 롱클릭을 하면, 일기를 삭제할 수 있도록 하고 싶습니다.
리스트뷰에서 삭제하는 것은 클릭한 포지션의 값을 받아 remove()를 통해 삭제하면 되지만, db를 어떻게 해야될 지 잘 모르겠습니다. delete문을 사용할 경우, 중간에 비는 인덱스가 생기게 됩니다.
예로, 1 - "1 substance" / 2 - "2 substance" / 3 - "3 substance" 라는 데이터가 db에 들어가있다 가정하고, 2번 인덱스의 데이터를 삭제하면 db에는 1 - "1 substance" / 3 - "3 substance" 데이터가 남게됩니다.
여기서의 문제는 리스트뷰의 포지션 값을 가지고 db의 인덱스 값과 비교해 데이터를 가져오는데, 리스트뷰의 경우엔 position이기때문에, 삭제하면 자동으로 당겨와져 일기가 아예 출력되지 않는 경우가 생기거나, 다른 값을 가져오는 경우가 생깁니다.
이 경우엔 어떻게 해야할까요?