2011-12-21 38 views
1

我一直试图使用字符通配符"_"在sqlite的条件和接近“跳出高位”我已经尝试了rawQuery和查询各种硬编码参数和软编码参数。它似乎忽略了字符通配符"_"并返回所有行或根本没有。rawQuery通配符`“_”`不工作

保持的数据是在表示oblect的特征例如一列可以表示对象

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

和行的颜色的颜色数列可以是“01001000”,这意味着它是橙色和蓝色但不是红色,黄色等。其他列包含单个字符,即大小包含s,m或l(映射小,中,大),数据库包含每种类型的多个列,这种想法尽可能具有紧凑的数据库。

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

的mywhere字符串被编译返回: - colour1像"_1__10__"和颜色2像"___1_01__"和大小= "l" 并传递给rawQuery

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

以下工作正常使用Firefox的SQLite的经理

声明
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); 

返回行,但不是全部在第一行都有1炭

但我不从

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

得到任何行,也有含“10000000”

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

+0

我发现我的问题!我导出了我在Firefox的SQLite管理器中创建的数据,以在Android中创建SQLite数据库,但没有意识到每一列的每一端都附加了一个空格,所以我认为数据中包含“10000000”,实际上它保存着“10000000” – user1108608 2011-12-22 14:57:39

回答

1

不知道这是你的问题的主要来源,但在SQLite的字符串分隔符是单引号(')而不是双引号一个(“)。参见this,例如。

+0

dmon谢谢。我来自Oracle的背景,并且我的印象是,“或”对是SQL中的字符串分隔符,无论它是否在SQLite中?您的示例是嵌入单引号(')而不是分隔字符串。你是正确的我在String [] whereArguments = {'1_______'}中使用'执行上面的测试'在select语句中获得了相同的结果:Java禁止';但是我从文档中明白rawQuery的selectionArgs值绑定为字符串。 – user1108608 2011-12-22 13:24:25