Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLiteDatabase.delete方法';不能使用where参数删除_Android - Fatal编程技术网

Android SQLiteDatabase.delete方法';不能使用where参数删除

Android SQLiteDatabase.delete方法';不能使用where参数删除,android,Android,观察我如何调用db.delete方法;如果执行以下操作,将成功删除记录: public void deteleProfile(Long id) throws SQLException { SQLiteDatabase db = helper.getWritableDatabase(); Integer i = db.delete(ProlificDatabase.TABLE, "_id=?", new String[] {id.toString()});

观察我如何调用
db.delete
方法;如果执行以下操作,将成功删除记录:

public void deteleProfile(Long id) throws SQLException {
        SQLiteDatabase db = helper.getWritableDatabase();
        Integer i = db.delete(ProlificDatabase.TABLE, "_id=?", new String[] {id.toString()});
        Log.d(TAG, i + " records deleted where id is " + id);
但是,如果我这样做:

public void deteleProfile(Long id) throws SQLException {
        SQLiteDatabase db = helper.getWritableDatabase();
        Integer i = db.delete(ProlificDatabase.TABLE, "?=?", new String[] {BaseColumns._ID,id.toString()});
        Log.d(TAG, i + " records deleted where id is " + id);
不删除任何记录。此外,也没有提出例外或警告来说明出现了问题

如果您没有听到,两个电话之间的区别是:

…“\u id=?”,新字符串[]{id.toString()})

vs

…?“=?”,新字符串[]{BaseColumns.\u ID,ID.toString()})

BaseColumns的文档。\u ID为:

公共静态最终字符串\u ID
带有
常量值:“\u ID”

后一种方法似乎使代码更整洁,但为什么不起作用呢

编辑: 我怀疑
wherergs
参数仅适用于表达式的右侧

有人能证实这一点吗

  public void deteleProfile(Long id) throws SQLException 
  {
     SQLiteDatabase db = helper.getWritableDatabase();
     Integer i = db.delete(ProlificDatabase.TABLE, "_id=" + id, null);
     Log.d(TAG, i + " records deleted where id is " + id);
  }

是android的SQLite数据库的一个很好的例子。

您在
中提供的字符串,其中rgs将被转义并包含在'

"?=?", new String[] {BaseColumns._ID,id.toString()});
转化为

'_id'='1234'
这是有效的SQLite语法,但执行字符串比较而不是表查找。由于“_id”与“1234”(或任何其他数字)不是同一字符串,因此表达式的计算结果将始终为false,并且不会删除任何内容

您应该使用以下语法

Integer i = db.delete(ProlificDatabase.TABLE, BaseColumns._ID + "=?", new String[] {id.toString()});

我的问题是为什么使用where args参数不起作用。我已经知道如何删除行;-)您是否在表中添加了列id?