2010-08-28 58 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