2012-07-29 66 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