2010-08-28 59 views
8

我一直试图在android应用程序的搜索中使用通配符,并且一直出现错误。通配符在SQLite中不工作

我执行使用下面的字符串在我的应用程序搜索:

Cursor c_name = b.query("namedrxns", new String[] { "_id", "name" }, 
       "name LIKE %?%", new String[] { query }, null, null, null); 

当我使用name LIKE %?%name=%?%我得到一个“近‘%’:语法错误:,编译时:选择_id,名称FROM namedrxns WHERE name =%?%“错误。

name LIKE '%?%'name='%?%'我得到,而不是“绑定或列索引超出范围:处理0x40cb70”

可能有人请告诉我,我做错了吗?

谢谢!

+2

如何将通配符添加到传入的变量中,而不是在查询中使用它? – 2010-08-28 23:11:17

+0

完美地工作,谢谢!这对我来说似乎有点愚蠢,但没关系。如果你把它作为答案,我会很高兴打勾你:) – 2010-08-28 23:33:13

+1

虽然听起来很正确。绑定的字符串参数基本上会包含引号和内容,所以您最终可能会得到类似于name =%'David'%这个无效的SQL。我的SQL知识并不完全符合标准,所以在这里完成的工作比我所能说明的要多一点,但是这应该让你知道为什么必须按照OMG小马所描述的来完成。 – 2010-08-29 01:33:17

回答

25

%附加到query参数。

即:

Cursor c_name = b.query("namedrxns", new String[] { "_id", "name" }, 
      "name LIKE ?", new String[] { "%"+query+"%" }, null, null, null); 

像托马斯·穆勒已经说了,请注意,值内%_仍然工作作为通配符。

+0

完整的值'查询'被转义并放在''之间,所以你的%必须与它一起 – njzk2 2011-12-06 15:52:29

5

下应该工作(但我没有使用SQLite测试):

"name LIKE '%' || ? || '%'" 

请注意,“%”和“_”值的范围内仍然可以工作作为通配符。

+0

谢谢,使用CONCAT使其在服务器端的工作,但不会在我的Android设备上的SQLite工作。这是为我做的正确方法。 – CounterFlame 2016-04-28 15:10:25

+0

如何添加上面的“OR”?明确添加不起作用.. – Ryde 2016-06-23 20:33:12