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

데이터베이스 id 값에 따른 삭제

0 추천

OnTestItemClickListener라는 리스너를 생성해 adapter의 itemView를 누를시 삭제하는 과정을 하려고 합니다.

<TurnKoreanFragment.java>일부분

<TestInfo.java>

public class TestInfo {
    int _id;
    String year;
    String month;
    String age;
    String grade;
    String score;

    public TestInfo(int _id, String year, String month, String age, String grade, String score ){
        this._id = _id;
        this.year = year;
        this.month = month;
        this.age = age;
        this.grade = grade;
        this.score = score;
    }

    public int getId() {
        return _id;
    }

    public void setId(int _id) {
        this._id = _id;
    }

--생략--

TestInfo.java에서 _id값을 부여하고

<TurnKoreanFragment.java>

adapter.setOnItemClickListener(new OnTestItemClickListener() {
    @Override
    public void onItemClick(TestAdapter.ViewHolder holder, View view, int position) {
        TestInfo test = adapter.getItem(position);
        int _id = test.getId();
        callback.delete(_id);
    }
});

여기에 _id을 가져와 callback.delete(_id)를 입력해 해당 id값을 가진 데이터를 삭제하려고 합니다.

<OnDatabase라는 인터페이스>

public interface OnDatabaseCallback {
    public void insert(String year, String month, String age, String grade, String score);
    public ArrayList<TestInfo> selectAll();
    public void delete(int _id);

}

<MainActivity.java>

public class MainActivity extends AppCompatActivity implements OnDatabaseCallback{

--생략--

    @Override
    public void delete(int _id) {
        database.deleteItem(_id);
    }
}

<TestDatabase>

public void deleteItem(int _id) {

    try{
        db.execSQL("delete from " + TABLE_TEST_INFO +
                " where " +
                "   _id = " + _id);
    }catch (Exception ex){
    }
}

deleteItem(int _id)에 SQL문을 저렇게 입력하여 해당 _id값에 해당하는 데이터를 지우도록 하려하였지만

itemView클릭시 아무 반응을 하지 않습니다.

TestInfo.java에서 _id값을 만들때 TestInfo.java에서 getId(),setId()의 작성만으로 id값이 부여되는것이 아닌지...

그래서 현재 TurnKoreanFragment.java에서의 test에 id가 부여가 되지 않는 것인지..

아니면 전체적으로 코딩이 오류가 있는지.. 입력, 조회는 다 돌아가지만 id에 따른 삭제만 되고 있지 않습니다

혹은 DELETE문에서 이상이 있는건지 봐주세요

 

쿠롱 (400 포인트) 님이 2022년 1월 31일 질문
쿠롱님이 2022년 1월 31일 수정

1개의 답변

0 추천
MainActivity가 OnDatabaseCallback을 implement했는데, adapter의 onItemClick에서는 callback.delete를 호출하고 계시네요. adapter 가 MainActivity의 멤버 오브젝인 것 같은데... 그렇다면 그냥 MainActivity의 delete(_id)를 호출하시면 될 것 같은데요. callback 은 필요가 없어 보여요. 그리고 deleteItem이 호출되고 나서 성공할 경우 다시 데이터를 가져와서 어댑터를 갱신해주셔야 합니다.
spark (226,420 포인트) 님이 2022년 1월 31일 답변
spark님이 2022년 1월 31일 수정
그럼 id값에 따른 삭제를 위한 DELETE문 작성은 올바르게 된건가요?
맞는듯 한데, DB explorer 에서 테스트 해보세요.  Android Studio에 툴이 제공되요. 아니면 플러그인을 설치하셔도 되구요.
...