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

db삭제에 대한 2가지 조언을 얻고자 합니다.

0 추천

 

(((혹시 aucd29님께서 이 글 을 다시 보시면 1시간정도 전 질문의  제 댓글 좀 봐주셨으면 감사하겠습니다.))

 

첫번째는요~

디비 리스트뷰에서 ALL DEL 버튼을 클릭시 모든 데이터들을 삭제하게끔 코딩했습니다.

실제적으로 디비에서 삭제는 되지만,

뷰상에서는 변화가 없어서 질문드립니다.

뭐 껏다다시 켜면 빈 화면으로 보이지만,,            앱을 재구동하지 않고

DELETE ALL 버튼을 누름과 동시에 리스트뷰가 비어지는 기능을 구현하고 싶습니다.

public void onClick(View v) {
 
 SQLiteDatabase db;
 String sql;
 
 switch(v.getId()) {
  
 case R.id.deleteAll :
  
  db = dbHelper.getWritableDatabase();
  sql="DELETE FROM notice;";
  db.execSQL(sql);
  Log.d("sql", "delete all !!!");
  adapter.notifyDataSetChanged();
  Toast.makeText(getBaseContext(), "deleted all !!!", Toast.LENGTH_SHORT).show();
  break;
  
 }

 

두번째는요~

DELETE 버튼을 눌렀을대 해당 포지션을 읽어서 리스트뷰에서 삭제하도록 코딩했습니다.

리스트뷰에서 즉시 삭제는 되지만 이걸 다시 DB로 저장해야

앱을 재구동했을때 해당데이터가 보이지 않게 되자나요.

지금 현재는 단순 현재에서 삭제만 될뿐 db에 재저장하는 방법을 알고 싶습니다.

 

부탁드릴께요

AlertDialog.Builder alert_confirm = new AlertDialog.Builder(DataActivity.this);
alert_confirm.setMessage("Detail DATA").setCancelable(true).setPositiveButton("DATA",
   new DialogInterface.OnClickListener() {
      @Override
       public void onClick(DialogInterface dialog, int which) {
                 // 'YES'
        Intent intent = new Intent(DataActivity.this, ReportActivity.class);
        intent.putExtra("arraydata", str);
        startActivityForResult(intent, 0);                        
       }   
       }).setNegativeButton("DEL",
   new DialogInterface.OnClickListener() {
       @Override
       public void onClick(DialogInterface dialog, int which) {
                 // 'No'
                 //item.remove(position);
                
                // db.execSQL();
             // cursor.requery();
                 ListView mList = (ListView)findViewById(R.id.list);
                 mList.setAdapter(adapter);
                 adapter.remove(str);
                 adapter.notifyDataSetChanged();
                
                
       return;
       }
       });
 AlertDialog alert = alert_confirm.create();
 alert.show();          
}
}; 

 

그리워요 안드로메다 (250 포인트) 님이 2013년 6월 19일 질문

2개의 답변

0 추천
리스트뷰에서 해당 row를 삭제하시기 보다는, 해당 row를 기준으로 값을 받아와서 해당 db를 지우신 후, listview를 새로고침하는게 좋을 것 같네요

 

1번과 2번 질문 그러니까 모두 둘 다 같은 방법으로 해결할 수 있겠습니다.
김생선 (3,310 포인트) 님이 2013년 6월 19일 답변
글을 코딩하는 수준이 안되는 초보라서요. 참고할만한 사이트가 있을까요>? 아니면 시간 좀 되시면 좀 도와주시면 정말 감사할것 같습니다.
아 큰 걱정 안하셔도 됩니다. 말이 좋아서 새로고침이지 그냥 listview에 데이터를 커서아답터로 이용하여 넣듯이 쓰시면 됩니다.

1번 질문을 예로 들자면, 저 액티비티로 진입할 때 db를 select query 하고 그 결과값을 cursor adapter였나, 여튼 그런걸 이용해서 listview의 각 row에 바인딩 하잖아요. 그걸 다시 실행시켜주시면 되는겁니다.

2번의 경우에는 해당 row를 지우시듯, 해당 row의 데이터들을 받아오시면 그 데이터들 중에서 db 삭제할만한 데이터가 있을거에요. 가령 row의 순서라거나 아니면 특별한 값이라거나. 이 값들을 query에 넣어서 delete 시켜주시고, 1번의 경우와 마찬가지로 새로고침을 하시면 될 것 같습니다.
제 방법이 살짝 비효율적이긴 한데 어떻게 도움드리기가 살짝 애매합니다. 애초에 저거 row 하나 지우자고 select 쿼리를 다시 이용하는게 거시기하거든요.

저는 일단 저런 방식으로 구현했습니다. 참고하시기를.
감사합니다. 잘 될지는 모르갰는데 한번 시도해봐야겠습니다.
0 추천

query를 이용해서 db 를 지웠지만 실제적으로 리스트 뷰와 데이터 연동하는 것은 ArrayList 입니다.  이전에 저장했던 

item.add(date1+"\n"+time1+"\n"+wichi1+"\n"+pajang1+"\n"+opower1); 를 기억하실 테고  이 ArrayList 에 값을 초기화 한 뒤 notifyDataChanged 를 호출 하세요  ArrayList 를 초기화 하는건 쉽게 찾을 수 있을 겁니다.

 

db 에는 보통 primary key 라고해서 절대 고유의 숫자를 만들어 놓습니다. android 에서는 기본적으로 _id 를 해당 명으로 사용하며 디비를 생성하였을 때 만드셨을 거라고 생각이 됩니다. 안만들었다면 추가하세요 . 

이 값을 이용해 onClick 시 delete query를 날리고 위와 마찬가지로 item 의 특정 값도 삭제 한 뒤 notifyDataChanged를 호출 하면 됩니다. 

http://stackoverflow.com/questions/14785883/android-delete-database-row-from-listview

 

PS. 책 한권 사면 이런 내용은 다 있습니다.

aucd29 (218,390 포인트) 님이 2013년 6월 20일 답변
...