SQLiteDatabase.delete()和whereArgs奇怪的行为

时间:2013-12-10 14:00:02

标签: android sqlite

根据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会出现问题。这里发生了什么?

1 个答案:

答案 0 :(得分:2)

这是因为您需要匹配INTEGER 1delete(...)参数用作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