안드로이드 SQLite 데이터 수정, 삭제 - 전화번호부 앱

YAMAMAMO·2021년 11월 16일
0

서론

이전 포스팅에서 전화번호부앱 데이터를 SQLite에 저장하고 불러오는 기능을 추가했습니다.

이번에는 저장된 데이터를 삭제, 수정하는 기능을 추가하겠습니다.

안드로이드 개발자 문서를 참고했습니다.

https://developer.android.com/training/data-storage/sqlite

삭제

-MainActivity 에서 deleteNumber 메서드 추가하고 리사이클러뷰 클릭 이벤트중 삭제 버튼 클릭시 메서드 실행했습니다.

		
......
				//리사이클러뷰 클릭 이벤트
        mAdapter.setOnItemClickListener (new Adapter.OnItemClickListener () {\
		......

            //삭제
            @Override
            public void onDeleteClick(View v, int position) {
                String name = mArrayList.get (position).getName ();
                String number = mArrayList.get (position).getNumber ();

                //데이터삭제
                deleteNumber (name, number);

                mArrayList.remove (position);
                mAdapter.notifyItemRemoved (position);
            }

        });
.......
//SQLite 데이터 삭제
    private void deleteNumber(String name, String number) {
        //WHERE 절 삭제될 열을 찾는다.
        String selection = DBHelper.FeedEntry.COLUMN_NAME_NAME + " LIKE ?" +
                " and " + DBHelper.FeedEntry.COLUMN_NAME_NUMBER + " LIKE ?";
				//삭제될 열을 찾을 데이터
        String[] selectionArgs = {name, number};
        db.delete (DBHelper.FeedEntry.TABLE_NAME, selection, selectionArgs);
    }

-Smith 를 삭제. 앱 종료 후 실행시 완전히 삭제된 것을 알 수 있습니다.

수정

-MainActivity에 updateNumber() 메서드 추가하고, 다이얼로그에서 수정 버튼 클릭시 기능 동작하도록 했습니다.

		.....
		//SQLite 데이터 수정
    //newName 은 수정된 값, oldName 수정전 값
    private void updateNumber(String oldName, String oldNumber, String newName, String newNumber){
        //수정된 값들을 values 에 추가한다.
        ContentValues values = new ContentValues();
        values.put(DBHelper.FeedEntry.COLUMN_NAME_NAME, newName);
        values.put (DBHelper.FeedEntry.COLUMN_NAME_NUMBER, newNumber);

        // WHERE 절 수정될 열을 찾는다.
        String selection = DBHelper.FeedEntry.COLUMN_NAME_NAME + " LIKE ?" +
                        " AND "+ DBHelper.FeedEntry.COLUMN_NAME_NUMBER + " LIKE ?";
        String[] selectionArgs = { oldName, oldNumber };

        db.update(DBHelper.FeedEntry.TABLE_NAME, values, selection, selectionArgs);
    }
	......

//AlertDialog 를 사용해서 데이터를 수정한다.
    private void editItem(String name, String number, int position) {
      ......
        // 수정 버튼 클릭
        //어레이리스트 값을 변경한다.
        btn_edit.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View view) {
                String editName = edit_name.getText ().toString ();
                String editNumber = edit_number.getText ().toString ();
                mArrayList.get (position).setName (editName);
                mArrayList.get (position).setNumber (editNumber);

                //데이터 수정메서드 실행
                updateNumber (name,number,editName,editNumber);

                mAdapter.notifyItemChanged (position);
                dialog.dismiss ();
            }
        });
		.......
    }

-Marie를 Anna로 수정했습니다.
-안드로이드 스튜디오에서 클라이언트의 SQLite을 볼 수 있습니다. 하단메뉴 중 Database Inspector에서 볼 수 있습니다.


-데이터가 변한것을 확인할 수 있습니다.

마무리

-간단한 전화번호부 앱을 완성했습니다. 데이터를 입력 받고 입력받은 값을 저장, 수정, 삭제할 수 있습니다. 이 데이터들을 리사이클러뷰에 보여집니다.

-모든 코드는 4개 포스팅을 모두 확인해보면 알 수 있습니다. 코드 리팩토링후 깃헙에 올릴 예정입니다.

-궁금한 것 있으면 댓글 부탁드립니다.

-다음 포스팅은....

전체코드

https://github.com/yamamamo/MobileNumberSample

profile
안드로이드 개발자

3개의 댓글

comment-user-thumbnail
2022년 12월 19일

xml 파일은 없나요?

2개의 답글