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

안드로이드 DB 삭제시...

0 추천
package com.example.sqlitedatebasetest;
 
import java.util.ArrayList;
 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DataBaseTest extends SQLiteOpenHelper{
 
SQLiteDatabase msqlite;
 
public DataBaseTest(Context context) {
super(context,"sist.db",null,1);
// TODO Auto-generated constructor stub
msqlite = this.getWritableDatabase();
createTable();
}
 
private void createTable() {
// TODO Auto-generated method stub
String sql = "select count(*) from sqlite_master where name='member'";
 
Cursor c = msqlite.rawQuery(sql, null);
 
int result = 0;
 
c.moveToFirst();
 
result = c.getInt(0);
 
if(result==0){
sql = "create table member(name text, pass text , " + "address text, email text);";
 
msqlite.execSQL(sql);
 
}
 
}

 

public void insertMenber(String name, String pass, String address,
String email) {
// TODO Auto-generated method stub
 
String sql = "insert into member values('"+name+"','"+pass+"'," + "'"+address+"','"+email+"');";
 
msqlite.execSQL(sql);
 
}           ////////////// 추가 하는 부분

 

 
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
 
}
 
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
 
}
 
public ArrayList<String> allMenberSearch() {
// TODO Auto-generated method stub
ArrayList<String> vec = new ArrayList<String>();
 
String sql = "select * from member";
 
Cursor c = msqlite.rawQuery(sql, null);
 
c.moveToFirst();
 
while(c.isAfterLast() == false){
vec.add(c.getString(0));
 
c.moveToNext();
}
 
c.close();
 
 
return vec;
}
 
 
}

리스트뷰 보이는 부분..
 
package com.example.sqlitedatebasetest;
 
import java.util.ArrayList;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
 
public class AllmemberList extends Activity{
 
DataBaseTest db;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.arrayroom);
ListView list = (ListView) findViewById( R.id.lv );
 
Intent intent = getIntent ();
 
ArrayList<String> array = intent.getExtras().getStringArrayList("name");
 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_selectable_list_item,array);
//simple_list_item_1
 
 
list.setAdapter(adapter);
 
list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>parent, View v ,int position, long id){
 
Toast.makeText(getBaseContext(),"ㅎㅎ", Toast.LENGTH_LONG).show();
 
}
});
 
 
 
}
 
}
 
 

구글링,, 검색.. 해봐도 다른 삭제 부분을 잘 모르겠어요...

도와주세요...

삭제시 하나씩 삭제 하게 만들려고 합니다..

데이터 베이스를 리스트뷰 출력까지 했습니다.

리스트를 누르면 삭제되게..하려고 합니다..

 
 
익명사용자 님이 2014년 8월 20일 질문
2014년 8월 20일 수정

1개의 답변

0 추천

리스트를 누를 때 삭제하려면 리스트에 클릭이벤트?를 걸어야겠죠.
http://croute.me/446 구글링해보니 이 사이트가 맨 상단에 떠서 링크 첨부해봅니다. 클릭/롱클릭 있으니 그건 원하시는데로 하시면 되고..보통은 롱클릭해서 삭제하거나 수정하는 경우가 많네요. sql문에서 삭제하는 문은 delete입니다.

String sql = "insert into member values('"+name+"','"+pass+"'," + "'"+address+"','"+email+"');";

이건 학생정보를 새로 추가하는 건 아실테고..

String sql = "delete FROM member where name='누구'"; 이런식으로 하면 되지 않을까요.

뒤에 조건문 없이 delete FROM member하면 member테이블에 있는 모든 값이 삭제 될테니, 리스트에서 사용자가 원하는 값을 클릭했을 때, 해당 리스트열에서 이름이든 뭐든 값을 가져와서 지워야겠죠. 

근데 이름,패스,주소,이메일 주소 중 2명이상 중복되는 경우가 있을 수있으니 [동명이인이라거나] primary key 인 녀석을

갖고 삭제하는게 좋겠네요.

 

anci (19,950 포인트) 님이 2014년 8월 20일 답변
anci님이 2014년 8월 20일 수정
댓글이 수정이 안돼서 댓댓글 답니다.
저같은 경우에도 학생정보를 입력받아서 리스트뷰에 출력하고, 리스트 자체를 클릭해서 삭제한건 아니고 체크박스로 체크해서 삭제하는 식으로 했었는데, 그때도 해당 열[한줄]의 학생 정보를 읽어와서 고유키인 학생번호로 delete해서 테이블에서 값을 삭제하고 listview.notifydatasetchanged();로 리스트뷰를 한 번 갱신해서 선택해서 삭제된 학생이 더 이상 리스트뷰에 보이지 않도록 했습니다.
삭제 부분 조금은 이해 했습니다.
그런데 삭제할때.. 클릭 했을때 어떻게..값을 가져와야댈지 모르겠습니다..
음..제 방법이 정석은 아닐 수도있지만요 ,제가 전에 만든 앱에서는 위에서 말씀드린대로, 체크박스로 선택된 해당 열[한줄]의 학생의 카드번호를 이용해서 db 테이블에서 삭제했습니다. 고유키는 학생카드번호였구요, 이건 절대로 중복되지 않습니다. db에 editText로 insert할 때도 카드번호 중복되면 이미 있는 번호라고 재입력을 요구했구요. 여튼 학생 한명한명을 구별할 수있는 값으로 지우면 좋겠죠. 이름으로 삭제한다고 하면 홍길동학생이 두명인데, 서로 다른 사람이라 패스워드도, 주소도, 이메일도 다른데 delete from member where name='홍길동'; 이런식으로 한다면 둘다 삭제 되니까요. 여튼 구글이나 네이버에 리스트뷰 클릭이벤트라고 검색해보세요.. http://jystudynote.tistory.com/entry/AndroidListVIew-Click-LongClick-%EC%9D%B4%EB%B2%A4%ED%8A%B8
이 블로그에도 해당 기능에 대한 예제가 있네요;  지금 님이 올리신 소스를 자세히 못보는 상황이라, 님이 listview 한줄마다 출력한게 학생이름뿐인지, 뭔지 모르겠지만.. 저 위의 예제를 이용해서 한줄클릭했을 때 클릭이벤트에서 선택된 열에서 얻어오는 값을 string값으로 저장했다가, 로그캣이든 토스트든 찍어보세요. 맨 마지막 setOnItemClickListener 을 보니 어떤 줄을 클릭하든 ㅎㅎ라는 토스트가 띄워질텐데, 일단 각 줄에 해당하는 학생의 이름값이라도 클릭했을 때 얻어오는것부터 하시는게 좋겠네요. 어떤 값을 기준으로 테이블에서 학생을 지울건지는 님이 정하시면 되구요..
학생을 지우실 때 setonitemClickLinstener에서 해당 학생의 이름이든 뭐든 string값으로 저장하시고, delete하신다음 notify처리 하시면 되지 않을까요.저는 삭제버튼을 따로 만들어서 그걸 누르면 String sql = "delete from info where id = '" + cardnumber + "';"; 이런식으로 삭제했습니다.
...