Android SQLiteDatabase.delete()和wherergs奇怪的行为

Android SQLiteDatabase.delete()和wherergs奇怪的行为,android,sqlite,Android,Sqlite,基于,我有一个SQLiteDatabase删除查询,如下所示: SQLiteDatabase db=MyHelper.getWritableDatabase(); String[] whereArgs={"1","1"}; db.delete(TABLE_NAME, COLUMN1+"=? AND "+COLUMN2+"=?",whereArgs); 上述查询对基础数据库表没有影响 但是,如果我将上述查询更改为: db.delete(TABLE_NAME, COLUMN1+"=1 AND "

基于,我有一个
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);
不使用删除参数(
wherergs


这使我相信用
wherergs
中相应的参数正确替换
s是有问题的。这里发生了什么?

发生这种情况是因为需要匹配
整数
1
delete(…)
参数用作
文本

如果您使用的是数值参数,那么最好使用SQL命令串联,就像第二次一样

需要注意的是,您可以使用以下解决方法:

db.delete(TABLE_NAME, COLUMN1"=CAST(? AS INT) AND "+COLUMN2+"=CAST(? AS INT)", whereArgs);


请小心,因为带有无效数字字符串的
CAST(?AS INT)
将返回
0

我意识到这与强制转换有关。然而,我的问题是,我没有为
COLUMN2
指定任何数据类型(存储类)。这就是为什么它可能默认使用my
wherergs
(即
TEXT
)的类型。修改数据类型为
INTEGER
的列成功了。(我不需要像你说的那样投
CAST
)。不过,谢谢!
db.delete(TABLE_NAME, "CAST("+COLUMN1" AS TEXT)=? AND CAST("+COLUMN2+" AS TEXT)=?", whereArgs);