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

Sqlite delete시 질문입니다.

0 추천

안녕하세요.

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이기때문에, 삭제하면 자동으로 당겨와져 일기가 아예 출력되지 않는 경우가 생기거나, 다른 값을 가져오는 경우가 생깁니다. 

이 경우엔 어떻게 해야할까요?

 

 

 

 

 

seoHyun99 (160 포인트) 님이 2017년 1월 25일 질문

2개의 답변

0 추천
순서대로 띄우실거면 db값을 그냥 리스트로 받아서 그다음에 하나씩 포지션에 넣어주세여
익명사용자 님이 2017년 1월 25일 답변
0 추천
흠...데이터베이스에 저런 인덱스가 필요하진 않습니다. tbl_index 라는놈을 실제 앱에서 보여주고 있는 리스트 index값으로 두어서 발생하는 문제 입니다. tbl_index가 아니라 primary key가 될 tbl_id를 만드셔서  auto increment로 자동으로 생성되게 해두시고

그리고 리스트를 불러올때 tbl_id를 같이 불러온다음 삭제시 id를 key로 삭제 하셔야됩니다.

DB와 데이터구조를 같은 방식으로 사용하려고 하니 이런질문을 하시는것 같습니다.
라쎄린드 (25,460 포인트) 님이 2017년 1월 25일 답변
...