我有一张桌子address (id,name,phone,address)
。
我在列表视图中公开了详细信息(name,phone,address)
。
我为列表中的每一行添加onCLick
函数以删除它。当我们没有使用primary_key时,如何仅删除该行。即我们只有(name,phone,address)
。可能存在重复的行,因此不希望删除多行。
如果我给delete from address where name ='name_val' and phone = 'phone_val' and address='address_val'
,它将删除所有与我不打算做的条件匹配的行。
数据库代码。
public List<String> getAllRecords(){
String query = "Select * FROM "+ TABLE_ACT;
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery(query,null);
List activities = new ArrayList<String>();
if(c.moveToFirst()){
do{
String actData= c.getString(1)+"\n"+c.getString(2)+"\n"+c.getString(3);
//getString(1) is name, getString(2) is phone, getString(3) is address
activities.add(actData);
}while(c.moveToNext());
}
c.close();
db.close();
return activities;
}
上面的方法返回一个Strings列表。这个在活动中使用,如下所示。
lists = dbHandler.getAllRecords();
ListAdapter adapter = new ArrayAdapter<String(this,android.R.layout.simple_list_item_1,lists);
并且它具有继承自ListActivity的onItemClickListener。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.e("Hello", "You clicked Item: " + id + " at position:" + position);
}
请帮我删除一个特定的行,因为ListItem中只包含姓名,电话和地址。
答案 0 :(得分:1)
public void deleteItem(String get_ID)
{
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE FROM Table_Name WHERE TABLE_ID='"+get_ID+"'");
}
OnClick 方法
viewOBJ.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myDbOBJ = new Your_Data_Base_Class(getContext());
myDbOBJ.deleteItem("1"); // set Dynamic
notifyDataSetChanged();
}
});
注意
get_ID
将是字符串或整数。要获得最佳方法, TABLE_ID 应为主键。
答案 1 :(得分:0)
只需使用所选行中的ID:
delete from address
where id = id_val
如果你正在使用CursorAdapter,那么你可以拨打getItemId()
:
long id = getItemId(position);
String where = "id=?";
String whereArgs = { Long.toString(id) };
db.delete(tableName, where, whereArgs);
这可以直接在您的OnClickListener或数据库帮助程序中。请注意,我假设您已经有一个打开的SQLiteDatabase对象。如果没有,你将不得不打开一个。