활용편 - 그렇다면.....ArrayList를 DB에서 활용하려면??



 ID Name  Comment 
이순신  내 죽음을 적에게 알리지 말라
홍길동  아버지를 아버지라 부르지 못하고 
단군  널리 인간을 이롭게 하라 


자~DB에 저장될 내용은 위와 같다.


또한 Layout에는 ListView를 두고 3개 행을 출력하도록 한다.


Add를 할때마다 ListView에도 하나의 행이 늘고, DB에도 저장이 된다. 


그럼....ArrayList가 할일은...?????? 매번 해당 어플이 처음 시작시 DB의 내용을 Read해서 ArrayList에 저장한다.


그리고!! Add를 할때마다 ArrayList와 DB에 동일하게 데이터를 저장해 주도록 한다.


Delete가 문제다. 보통 ListView에서 삭제를 할 경우 ContextMenu를 통해 클릭된 아이템의 Position값을 이용해서 DB의 ID로 값을 넘겨 delete를 


수행하게 되는데 DB의 ID는 갱신되지 않는문제가 있다. 즉 0, 1, 2, 3 의 ID중 2번 행이 삭제된 후에는 0, 1, 3번으로 데이터가 저장되어 있다.


이렇게 되면 ListView와 DB의 Sync는 맞지 않게 되고 ListView에서 position값을 넘겨주더라도 DB에서는 삭제 되지 않는다.


이를 위해 ListView와 DB사이에 ArrayList를 둠으로써 ListView에서 Position값 2를 ArrayList로 넘기면 ArrayList.get(2).id 를 읽어와서 해당 id값을


 DB로 넘겨 delete를 수행하면 정상적으로 해당 아이템이 삭제된다.


이대 ArrayList의 Clear를 통해 ArrayList를 비우고 DB로 부터 새롭게 아이템을 Read해야 함을 기억하자!



예제 소스를 통째로 올리기에는 벅차서....ㅋ ArrayList가 사용된 부분만 발췌해야지.



 

1. 먼저 가장 중요한 GuestBook_Read 클래스부터 보자. 


더보기


이 클래스에는 Adapter, ContentResolver, Cursor, ArrayList, SQLiteOpenHelper, DB 객체를 생성해 주는 Init()함수가 있으며,


Init후 DB로 부터 데이터를 Read하는 DBRead()함수가 있다. 데이터가 추가되거나 삭제 될 경우 DBRead()함수를 호출함으로써


갱신된 DB의 내용을 읽어와 ListView에 뿌려주는 역할을 한다.


DBRead함수를 보면 DB로 부터 데이터를 읽어와 Adapter에 연결해주면서 동시에 ArrayList에도 저장을 해준다.


딱....한줄 추가했다. ㅋ arList.add(mItem)



 

2. Add할 경우 DB에 데이터를 insert하면서 ArrayList에도 추가 저장하기.


더보기


save버튼을 클릭할 경우 EditText로 부터 값을 읽어와서 DB에 저장을 한다. 


그리고 요거 한줄이면 ArrayList에도 데이터가 추가된다. 


GuestBook_Read.arList.add(new GuestBook_Item(newId, name, email, password, comment));


물론 추가된 데이터를 ListView에 적용시키기 위해서 DBRead()함수를 호출하는것도 잊지 말자.



 

3. 마지막으로 Delete할때 ArrayList로 position값을 넘겨서 ID값을 읽어와서 DB에서 해당 ID의 행을 삭제하기.


더보기



삭제시 바로  DB의 내용을 삭제 하지 않고, ArrayList에서 ID값을 읽어와 삭제하는 이유는....


이전 포스트에서도 설명을 했지만...


ListView의 position값과 DB의 ID값이 Sync가 맞지 않기 때문이다.


따라서 중간에 ArrayList를 넣어줌으로써 ListView -> ArrayList -> DB로 ID값을 넘겨서 삭제할 수 있도록 구현을 하였다.





휴...DB에 대한 이해가 부족해서 일주일은 고생을 한것 같다. 만족할 만한 결과가 나와서 다행이다.


소스도 어느정도 정리가 되어가고...미구현 사항들에 대해 계속 구현을 해야지.ㅋㅋㅋ








저작자 표시 비영리 변경 금지
신고
Posted by DoDo4989

댓글을 달아 주세요