【问题标题】:rawQuery wild card `"_"` not workingrawQuery 通配符`"_"` 不起作用
【发布时间】:2011-12-21 18:14:03
【问题描述】:

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

保存的数据在代表物体特征的几列中,例如,一列可能代表物体的颜色

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

并且一行的颜色可以是“01001000”,这意味着它是橙色和蓝色,但不是红色、黄色等。其他列包含单个字符,即 size 包含 s、m 或 l(映射 small、medium、large )数据库持有每种类型都有几列,这个想法是尽可能紧凑的数据库。

我的第一个意图是通过将我的选择的“位置”作为字符串传递给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 管理器可以正常工作

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 和 query 在 Android 中的功能存在问题。

【问题讨论】:

  • 我发现了我的问题!我导出了我在 Firefox 的 SQLite 管理器中创建的数据,以在 Android 中创建 SQLite 数据库,但我没有意识到每列在每一端都附加了一个空格,所以我认为数据包含“10000000”,它实际上包含“10000000”。跨度>

标签: android sqlite wildcard


【解决方案1】:

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

【讨论】:

  • dmon 谢谢。我来自 Oracle 背景,我的印象是,无论是在 SQLite 中,“还是”对都是 SQL 中的字符串分隔符?您的示例是嵌入单引号 (') 而不是分隔字符串。无论如何,以防万一你是对的,我在 select 语句中使用 ' 进行了上述测试,结果相同。Java 禁止在 String[] whereArguments = { '1_______' } 中使用 ',但我从文档中了解到 rawQuery 的 selectionArgs 值绑定为字符串.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 2015-09-09
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多