我有一个带删除功能的数据库文件:
public boolean deleteContact(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
在我的列表视图适配器中,我有可选择的项目,提供选项:
private void Example() {
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(ShopSell.this);
dlgAlert.setTitle("Example Item");
dlgAlert.setMessage("What would you like to do?");
dlgAlert.setPositiveButton("Okay",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dlgAlert.setNegativeButton("Delete",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//This is where I'm trying to delete the item
db.deleteContact(//no idea what to put here...);
}
});
dlgAlert.setCancelable(true);
dlgAlert.create().show();
}
那么我调用什么方法找出rowID并相应删除它?
如果需要,这是整个数据库文件:
public class DBAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_ITEM = "item";
private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "InventoryDB";
private static final String DATABASE_TABLE = "inventory";
private static final int DATABASE_VERSION = 4;
private static final String DATABASE_CREATE = "create table if not exists inventory (_id integer primary key autoincrement, "
+ "item VARCHAR not null);";
private final Context context;
private DatabaseHelper DBHelper;
private static SQLiteDatabase db;
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS inventory");
onCreate(db);
}
}
// ---opens the database---
public DBAdapter open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}
// ---closes the database---
public void close() {
DBHelper.close();
}
// ---insert a record into the database---
public long insertRecord(String item) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_ITEM, item);
return db.insert(DATABASE_TABLE, null, initialValues);
}
// ---deletes a particular record---
public boolean deleteContact(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
// ---retrieves all the records---
public static Cursor getAllRecords() {
return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_ITEM},
null, null, null, null, null, null);
}
// ---retrieves a particular record---
public Cursor getRecord(long rowId) throws SQLException {
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID, KEY_ITEM }, KEY_ROWID + "=" + rowId, null, null,
null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public int deleteAll(){
return 0;
}
// ---updates a record---
public boolean updateRecord(long rowId, String item) {
ContentValues args = new ContentValues();
args.put(KEY_ITEM, item);
return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
}
答案 0 :(得分:0)
我不确定我是否属实,但我认为对于行ID,您必须在PRIMARY_KEY
时在数据库中添加database creation
,以便您可以访问数据库。
喜欢:在一个10名学生中,Rahul's roll-no is 9
(Primary_key)现在如果你想删除rahul,then roll-no : 9
可以作为你的程序的row_id
。
答案 1 :(得分:0)
在listview
中填充数据后,您可以使用长按或任何您要求的数据。为此,我在longitemClickListener
上使用listview
并显示AlertDialog
以删除它。
我使用rowID
获取特定行并删除它。这是代码:
db = new AndroidOpenDbHelper(this);
showing_history
.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1, final int rowId, long id) {
final AlertDialog.Builder b = new AlertDialog.Builder(
MainActivity.this);
b.setIcon(android.R.drawable.ic_dialog_alert);
b.setMessage("Delete this from history?");
b.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
HistoryNamesList.remove(rowId);
deleteRow(History_id[rowId]);
((BaseAdapter) mHistoryListAdapter)
.notifyDataSetChanged();
}
});
b.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
dialog.cancel();
}
});
b.show();
return true;
}
});
希望这会对你有所帮助。