rawQuery外卡`" _"`不工作

时间:2011-12-21 18:14:03

标签: android sqlite wildcard

我一直在尝试在sqlite中使用字符通配符"_",其中条件和接近“跳出高处”我已经尝试了rawQuery和查询以及各种硬编码和软编码参数。它似乎忽略了字符外卡"_"并返回所有行或根本没有。

所保存的数据位于表示oblect特征的若干列中,例如列可能代表对象的颜色

("red,orange,yellow,green,blue,indego,violet,black")

并且行的颜色可以是“01001000”,表示它是橙色和蓝色但不是红色,黄色等。其他列包含单个字符,即大小包含s,m或l(映射小,中,大)数据库保存每种类型的几个列,想要尽可能紧凑的数据库。

我的第一个目的是通过将我的select的'where'作为字符串传递给rawQuery(myselect,null)来编码,其中myselect是在代码中编译的,以响应用户选择的几个功能。 即

mywhere字符串被编译为返回: - colour1喜欢"_1__10__",colour2喜欢"___1_01__",size = "l" 并传递给rawQuery

db.rawQuery("SELECT _id , name FROM widgets WHERE " + mywhere , null);

使用Firefox的SQLite Manager

,下面的声明可以正常工作
SELECT _id , name FROM widgets WHERE colour1 like "_1__10_" and colour2 like "__1_01___" and size ="m" 

为了调查我已将查询减少到where子句

中的一列
myselect ="SELECT _id ,name,FROM widgets where colour1 like  \"1_______\"";
cursor = db.rawQuery(myselect,null);

不返回任何行

myselect ="SELECT _id ,name,FROM widgets where colour1 like  \"%1_______%\"";
cursor = db.rawQuery(myselect,null);

返回行,但并非所有行都在第一个字符处有一个1(我期望这个)

myselect ="SELECT _id ,name, FROM widgets where colour1 like ?";
String[] whereArguments = { "1_______" };
cursor = db.rawQuery(myselect,whereArguments);

不返回任何行

myselect ="SELECT _id ,name, FROM widgets where colour1 like ?";
String[] whereArguments = { "%1_______%" };
cursor = db.rawQuery(myselect,whereArguments);

返回行,但并非所有行都在第一个char

但是我没有从

获得任何行
myselect ="SELECT _id ,name, FROM widgets where colour1 like ?";
String[] whereArguments = { "10000000" };
cursor = db.rawQuery(myselect,whereArguments);

并且有些行包含“10000000”

有人有任何解决方案吗?我尝试过搜索,但似乎rawQuery和查询在Android中有可疑的功能。

1 个答案:

答案 0 :(得分:1)

不确定这是否是问题的主要来源,但SQLite中的字符串分隔符是单引号字符(')而不是双引号字符(“)。例如,请参阅this