有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从listview和数据库中删除项

我有一个列表视图,其中包含用户数据的列表。当我长时间单击listview项目时,我希望删除该项目。我已经有了它,因此该项看起来像是被删除了,但是当我返回并刷新页面或稍后重新打开页面时,数据仍然存在。我知道这是因为数据库中的项目没有被删除,只有listview项目被删除。我也不知道如何删除数据库对象,通过查看以前的线程,我尝试了几种不同的方法,但它们似乎不起作用

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()   {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,  int position, final long id) {

            AlertDialog.Builder adb = new AlertDialog.Builder(PreviousPractices.this);
            adb.setTitle("Delete?");
            adb.setMessage("Delete this?");
            final int positionToRemove = position;
            adb.setNegativeButton("Cancel", null);
            adb.setPositiveButton("Yes", new AlertDialog.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    db.remove(id);
                    ArrayOfPractices.remove(positionToRemove);
                    adapter.notifyDataSetChanged();
                }
            });
            adb.show();
            return false;

        }
    });

这是我第一次尝试。数据库类中的删除方法是:

public void remove(long id){
    SQLiteDatabase db = this.getWritableDatabase();
    String string =String.valueOf(id);
    db.delete(DATABASE_TABLE, KEY_ID + " = " + id, null);
}

我尝试的第二种方法是使用以下方法:

public void deletePractice(Practice practice) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(DATABASE_TABLE, KEY_ID + " = ?",
            new String[]{String.valueOf(practice.getID())});
    db.close();
}

然后通过以下方式调用:

public void onClick(DialogInterface dialog, int which) {
                    db.deletePractice(pList.get(position));
                    ArrayOfPractices.remove(positionToRemove);
                    adapter.notifyDataSetChanged();
                }

共 (1) 个答案

  1. # 1 楼答案

    你的db.delete(DATABASE_TABLE, KEY_ID + " = " + id, null);代码很好

    但是,对于调试,请执行此操作,并通知我们

    int rowsDeleted = db.delete(DATABASE_TABLE, KEY_ID + " = " + id, null);
    Log.d(TAG, "Deleted rows = " + rowsDeleted);
    

    基本上告诉我们受影响的行数。我怀疑是0行,如果是这样,那么数据库_TABLE是错误的,或者变量id不是ID的正确值