2012-07-29 103 views
0

在Android上我想用類似這樣的查詢:sqlite的匹配運算符

SELECT docid FROM docs WHERE docs MATCH '("sqlite database" OR "sqlite library") AND linux' 

http://www.sqlite.org/fts3.html#section_3

的問題是,我得到了一個「畸形的比賽表達錯誤」。當我做更多的基本匹配查詢時,它的工作原理可能是因爲括號。

當我使用完全相同的語句(列表名稱除外)時,錯誤是相同的。

完整的錯誤消息:

 
sqlite returned: error code = 1, msg = statement aborts at 7: 
[SELECT * FROM namedays WHERE names MATCH '("sqlite database" OR "sqlite library") AND linux';]
malformed MATCH expression: [("sqlite database" OR "sqlite library") AND linux], db=/data/data/org.xyz/databases/data

任何想法?

+0

請發佈失敗的確切代碼(包括查詢),以及確切的錯誤消息。 – Mat 2012-07-29 11:12:31

+0

請編輯您的問題以在其中添加該信息。 – Mat 2012-07-29 11:29:43

+1

你是如何創建你的fts3表?還有,你如何構建出格式錯誤的查詢? – Jens 2012-07-29 12:31:32

回答

3

我相信你沒有使用SQLITE_ENABLE_FTS3_PARENTHESIS選項編譯的SQLite。因此,您只能使用Standard Query Syntax而不是Enhanced Query Syntax

您可以通過執行compile_options pragma來輕鬆驗證此情況。例如,我們看到我的sqlite3沒有增強語法:

sqlite> PRAGMA compile_options; 
DISABLE_DIRSYNC 
ENABLE_COLUMN_METADATA 
ENABLE_FTS3 
ENABLE_RTREE 
ENABLE_UNLOCK_NOTIFY 
SECURE_DELETE 
TEMP_STORE=1 
THREADSAFE=1 
+0

所以這意味着唯一的方法是通過相交多個SELECT? – jakk 2012-07-29 13:13:32

+0

是的,因爲沒有支持括號。 – 2012-07-29 13:14:58

+0

如何使用sqliteHelper啓用雜注? – DcodeChef 2013-04-03 14:20:33