根据official docs,我有一个SQLiteDatabase
删除查询,如下所示:
SQLiteDatabase db=MyHelper.getWritableDatabase();
String[] whereArgs={"1","1"};
db.delete(TABLE_NAME, COLUMN1+"=? AND "+COLUMN2+"=?",whereArgs);
上述查询对基础数据库表没有影响。
但是,如果我将上述查询更改为:
,则删除成功db.delete(TABLE_NAME, COLUMN1+"=1 AND "+COLUMN2+"=1",null);
不使用删除参数(whereArgs
)。
这让我相信用?
中的相应参数正确替换whereArgs
s会出现问题。这里发生了什么?
答案 0 :(得分:2)
这是因为您需要匹配INTEGER
1
和delete(...)
参数用作TEXT
。
如果使用数字参数,最好使用SQL命令连接,就像第二次一样。
谨慎一点,您可以使用以下方法解决问题:
db.delete(TABLE_NAME, COLUMN1"=CAST(? AS INT) AND "+COLUMN2+"=CAST(? AS INT)", whereArgs);
或
db.delete(TABLE_NAME, "CAST("+COLUMN1" AS TEXT)=? AND CAST("+COLUMN2+" AS TEXT)=?", whereArgs);
请谨慎使用,因为带有无效数字字符串的CAST(? AS INT)
将返回0
。