在sqlite中完成或重置语句的未知错误

时间:2013-02-11 23:00:07

标签: ios sqlite full-text-search fmdb

我试图让我们当前的数据库使用FTS。我使用FTS3和FTS4支持重新编译了该项目。我知道这部分是有效的,因为我已经尝试了sqlite页面中的一些例子并且它们可以工作。

e.g。

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管理器中运行它,它会创建一些不同的表(VirtualTestTable,VirtualTestTable_docsize,VirtualTestTable_segdir,VirtualTestTable_segments,VirtualTestTable_stat)。

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

我的另一个问题,对我来说更重要的是,如果我的查询在sqlite管理器中运行,我在我的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上创建一个空的虚拟表时,它运行正常。感谢。

1 个答案:

答案 0 :(得分:0)

FTS查询在SQL Manager中工作得很好:

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

错误消息“无法识别的参数:content =”是不支持无内容/外部内容表的SQLite版本的典型值,即早于3.7.11的版本。