1

我正在尝试让我们当前的数据库使用 FTS。我重新编译了 FTS3 和 FTS4 支持的项目。我知道这部分有效,因为我已经尝试了 sqlite 页面上的一些示例并且它们有效。

例如

CREATE TABLE t2(id INTEGER PRIMARY KEY, a, b, c);
CREATE VIRTUAL TABLE t3 USING fts4(content="t2", a, c);

我想要做的是将一个虚拟表添加到一个已经保存到我们应用程序的文档目录中的 .db 中。它是可写的。

我的问题是多部分的。首先,我在 Firefox 的附加 SQLite 管理器中尝试了我的查询。我的查询是这样的:

CREATE VIRTUAL TABLE VirtualTestTable USING fts4(content=Chromosomes, ID Integer Primary Key Autoincrement, rsID, ChrID, Position, Strand, GeneSymbol)

一旦我在 sqlite manager 中运行它,它就会创建几个不同的表(VirtualTestTable、VirtualTestTable_docsize、VirtualTestTable_segdir、VirtualTestTable_segments、VirtualTestTable_stat)。

所以我假设 sqlite manager 支持 FTS4。我的表中还填充了我的染色体表中的原始数据。但是当我尝试匹配表中的任何内容时,我总是得到零结果。所以我的第一个问题是,sqlite 管理器是否支持 FTS 查询?

我的另一个对我来说更重要的问题是,如果我的查询在 sqlite manager 中有效,我会在我的 Xcode 项目中尝试这个查询,并使用不同的变体

content='Chromosomes'
content=\"Chromosomes\"
content=Chromosomes

我的查询总是出错。我正在使用 FMDB 并使用 executeUpdate: 消息。我的错误是:

Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR
Unknown error finalizing or resetting statement (1: unrecognized parameter: content=Chromosomes)

有谁知道我为什么会收到这个错误?我不认为这是一个丢失的数据库,因为当我尝试在我的 fmdatabase 上创建一个空的虚拟表时,它运行良好。谢谢。

4

1 回答 1

0

FTS 查询在 SQL 管理器中工作得很好:

CREATE VIRTUAL TABLE t USING FTS4(x);
INSERT INTO t VALUES('blah');
INSERT INTO t VALUES('blubb');
SELECT * FROM t WHERE x MATCH 'bl*';

错误消息“unrecognized parameter: content=”对于不支持无内容/外部内容表的 SQLite 版本是典型的,即早于 3.7.11 的 SQLite 版本。

于 2013-02-12T11:24:40.253 回答