sqlite匹配运算符

时间:2012-07-29 11:07:18

标签: android sqlite

在Android上我想使用类似的查询:

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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