我创建了一个虚拟table.i问题是我无法使用fts3将唯一值插入到我的虚拟表数据库中。 这是我的创建表代码
public static final String DATABASE_CREATE =
"CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" +
KEY_CUSTOMER + " text UNIQUE," +
KEY_NAME + " NOT NULL," +
KEY_ADDRESS1 + " NOT NULL," +
KEY_ADDRESS2 + " NOT NULL," +
KEY_CITY + " NOT NULL," +
KEY_STATE + " NOT NULL," +
KEY_ZIP + " NOT NULL," +
KEY_SEARCH + "," +
KEY_AMOUNT + " NOT NULL," +
" UNIQUE (" + KEY_CUSTOMER + "));";
这里我希望KEY_CUSTOMER
是唯一的,它不起作用我可以多次存储同名...它忽略我的UNIQUE
声明
答案 0 :(得分:0)
如果作为CREATE VIRTUAL TABLE语句的一部分为FTS表显式提供了列名,则可以为每列选择性地指定数据类型名称。这是纯粹的语法糖,FTS或SQLite核心不会出于任何目的使用提供的类型名称。这同样适用于与FTS列名一起指定的任何约束 - 它们被解析但不被系统以任何方式使用或记录。
FTS表只能有效地进行全文搜索查询。 它既可以用作索引,也可以用作表格。
如果要使用约束,则必须将数据存储在“真实”表中,并仅将FTS表用于全文搜索。 (在这种情况下,您可能希望使用external content table。)
答案 1 :(得分:0)
就像这样: 创建两个表:
CREATE VIRTUAL TABLE IF NOT EXIST table1 USING fts3(content)
CREATE TABLE IF NOT EXIST table2(docid INTEGER, -Other Columns-)
唯一键在table2中,fts表只用于搜索 像这样嵌入sql
indexDB.beginTransaction();
INSERT INTO table1 (content) VALUES (?)
INSERT INTO table2 (docid, 'other columns') VALUES (last_insert_rowid(), ?)
indexDB.setTransactionSuccessful();
indexDB.endTransaction();
docid是两个表的外键。 table2的主键将帮助您使记录唯一