我无法从Android SQLite数据库中删除一行

时间:2017-08-31 17:01:57

标签: android sqlite

之前可能会问过这个问题,但其他问题与我的代码没有相似之处。我的SQLite表非常简单:我拥有的只是我的ID和TO_DO_NAME列,我想在ListItem调用onLongClick()时删除一行。我已经实现了长按功能,但是当我重新启动应用程序时,同样的项目就在那里。这是我的DatabaseHelper:

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "todo.db";
    public static final String TABLE_NAME = "student";
    public static final String ID = "id";
    public static final String TO_DO = "todo";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String CREATE_TO_DO_TABLE = "CREATE TABLE "
                + TABLE_NAME
                + "("
                + ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + TO_DO
                + " TEXT"
                + ")";
        sqLiteDatabase.execSQL(CREATE_TO_DO_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(sqLiteDatabase);
    }

    public boolean insertData(String todo) {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(TO_DO, todo);
        long result = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);

        if (result == -1) {
            return false;
        } else {
            return true;
        }
    }

    public Cursor getListContents() {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        Cursor data = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME, null);
        return data;
    }
}

这是我的更新方法,它负责单行删除:

public int itemDeleteFromDatabase(long id) {
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    int deleteFromDatabase = database.delete(TABLE_NAME, ID +  "=" + id, null);
    listItems.setAdapter(adapter);
    return deleteFromDatabase;
}

我从我的List项目中调用该方法长按:

listItems.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapter, View item, int position, long id) {
                toDoItems.remove(position);
                itemDeleteFromDatabase(position);
                MainActivity.this.adapter.notifyDataSetChanged();
                return true;
            }
        });

就像我说的那样,它仍然存在。

更新

这是我从以下位置添加数据的地方:

public void addItem(View v){
        EditText newItem = (EditText) findViewById(R.id.itemInputEditText);
        String item = newItem.getText().toString();
        databaseHelper.insertData(item);
        adapter.add(item);
        newItem.setText("");
    }

1 个答案:

答案 0 :(得分:1)

代码itemDeleteFromDatabase(position);中的

位置不是数据库中的ID。如果您要根据ID进行删除,则必须从ID中绑定的数组中获取RecyclerView

如果您直接使用数据库中的Curosr绑定RecyclerView,则必须在long id函数中传递itemDeleteFromDatabase。因为它返回数据库的自动索引ID。