db.delete删除第一行而不是指定的行

时间:2017-08-20 02:41:56

标签: java android android-sqlite

我希望能够删除 SQLite 数据库中的特定列。

我已尝试将列的ID作为whereClause传递,但我一直收到错误消息,指出whereClause需要字符串值。

我已经梳理了 SO 的解决方案,但没有找到任何可以回答我问题的内容。我也试过谷歌搜索,并以不同的方式写了我的问题,但无济于事。

这是我的代码

删除按钮

public void toDeleteNote(View view) {

    DBHelper dbHelper = new DBHelper(this);
    int deletedRows = dbHelper.deleteData(selectedID);
    if (deletedRows > 0){
        Toast.makeText(getBaseContext(), selectedName + " deleted successfully", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(getBaseContext(), "Something went wrong!", Toast.LENGTH_LONG).show();
    }
    Intent intent5 = new Intent(EditData.this, MainActivity.class);
    startActivity(intent5);

    }
}

DBHelper删除方法

public int deleteData(int id){
    String ID = String.valueOf(id);
    SQLiteDatabase database = this.getWritableDatabase();
    return database.delete(TABLE_NAME, _id + " = ?",new String[]{ID});

创建表格

@Override
public void onCreate(SQLiteDatabase db) {
   String createTable = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + MAP_NO + " INTEGER, " + LOCATION + " TEXT, " + DATE + " INTEGER, " + NOTATHOMES + " TEXT)";
    db.execSQL(createTable);
}

如果您需要更多信息,请随时提出。

2 个答案:

答案 0 :(得分:0)

您不应该依赖数据库的_id列来唯一标识表中的行,例如,如果您有3行,并且表将_id为0,1,2。事实并非如此。

无论表中的总行数如何,该值_id列都会递增。例如,如果最初有3行,则可能将_id设置为0,1,2。然后,如果删除前两行并再次添加相同的2行,则将具有2,3,4作为_id

因此,要唯一地标识表中的行,您应该在单独的列中定义自己的唯一ID(如UUID),对于行删除和添加不会更改。

答案 1 :(得分:0)

所以我想通了。

我需要做的就是使用与列表视图关联的游标返回id并以意图存储。

这是一个例子:

  public void displayList() {
        final Cursor cursor = dbHelper.getData();
        String from[] = new String[]{DBHelper.LOCATION};
        int to[] = new int[]{R.id.ListLayout1};
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.row_item, cursor, from, to, 0);


        final ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(simpleCursorAdapter);
        while (cursor.moveToNext()) {
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                if(cursor.getCount()>0) {
                    cursor.moveToPosition(i);
                    Intent intent = new Intent(MainActivity.this, EditData.class);
                    intent.putExtra("id", cursor.getInt(cursor.getColumnIndex(DBHelper._id)));
                    startActivity(intent);

就是这样。 感谢大家的帮助!