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?