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
指定任何数据类型(存储类)。这就是为什么它可能默认使用mywherergs
(即TEXT
)的类型。修改数据类型为INTEGER
的列成功了。(我不需要像你说的那样投CAST
)。不过,谢谢!
db.delete(TABLE_NAME, "CAST("+COLUMN1" AS TEXT)=? AND CAST("+COLUMN2+" AS TEXT)=?", whereArgs);