如何从SQLiteDatabase中删除行?

问题描述:

我有一个todo应用程序,它在主屏幕上显示ListView的任务列表。我试图通过点击完成按钮来删除任务。如何从SQLiteDatabase中删除行?

但该应用程序正在删除它的最低ID,而不是删除我试图删除的任务。

public void onDoneButtonClick(View view) { 

    ListView listView = (ListView)findViewById(R.id.list); 
    Cursor cursor = (Cursor) listView.getItemAtPosition(position); 
    int columnId = cursor.getColumnIndex(BaseColumns._ID); 
    int id = cursor.getInt(columnId); 
    Log.d("id", Float.toString(id)); 

    String sql = String.format("DELETE FROM %s WHERE %s = %d", 
      TaskContract.TABLE, 
      TaskContract.Columns._ID, 
      id); 

    helper = new TaskDBHelper(MainActivity.this); 
    SQLiteDatabase sqlDB = helper.getWritableDatabase(); 
    sqlDB.execSQL(sql); 
    updateUI(); 

    Log.d("delete", sql); 


} 

有人可以帮我解决这个问题吗?

+0

你的问题不明确。 –

+0

@MD当我点击done按钮时,它不会删除该特定任务,而是删除该行中的第一个任务。 –

+0

你试过删除方法吗? http://tinyurl.com/ngv2v3n – krystian71115

您可以在SQLiteDatabase使用delete方法:

http://tinyurl.com/ngv2v3n

编辑:

// you must do it after opening database 
helper = new TaskDBHelper(MainActivity.this); 
SQLiteDatabase sqlDB = helper.getWritableDatabase(); 

sqlDB.delete(
      TaskContract.TABLE, // table 
      TaskContract.Columns._ID + "=?", // where clause 
      new String[]{Integer.toString(id)} // where args 
      ); 
+0

对不起,它仍然删除行中的第一个在:( –

+0

@SelinAksu也许问题不在于SQLDatabase。你确定调用了正确的侦听器,并且光标在有效的位置? – krystian71115

+0

@SelinAksu也许你并没有转移到正确的位置,请参阅http://developer.android.com/reference/android/database/Cursor.html#moveToPosition(int) – krystian71115