我在 FTS3 表和普通数据库表之间切换时遇到问题。我的应用程序非常简单,允许用户将联系人添加到数据库,他们可以搜索与搜索查询匹配的联系人(为什么我使用 fts 表),然后将结果显示在带有 onItemclicklistener 的列表上。但是当我单击该项目时,出现错误。我已将此错误追溯到数据库(如果我使用普通数据库,它可以工作,但如果我使用 fts,它就不能)。因此,我决定使用这两种类型的数据库,并且想知道是否有人可以向我展示如何创建触发器来同步数据库。
我的第一个数据库是 CONTACT(数据库名称),表名为 CONTACTS。第二个数据库表是 CONTACTS_FTS。我所搜索的只是 COL_NAME,那么这就是我在 CONTACTS_FTS 表中所需要的全部内容吗?我想知道是否有人可以检查我的触发器是否有效?
public static final String DATABASE_NAME = "CONTACT";
public static final String DATABASE_TABLE = "CONTACTS";
private static final String DATABASE_TABLE_FTS = "CONTACTS_FTS";
private static final int DATABASE_VERSION = 20;
private Context ourContext;
private DbHelper DBHelper;
private static SQLiteDatabase db;
private static final String DATABASE_CREATE =
"CREATE TABLE " + DATABASE_TABLE + " (" +
COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL_NAME + " TEXT NOT NULL, " +
COL_EMAIL + " TEXT NOT NULL, " +
COL_CELL + " TEXT NOT NULL, " +
COL_ARRIVAL + " TEXT NOT NULL, " +
COL_DEPARTURE + " TEXT NOT NULL, " +
COL_FLIGHT_NUMBER + " TEXT NOT NULL, " +
COL_HOTEL_ROOM_NUMBER + " TEXT NOT NULL, " +
COL_EVENT1 + " TEXT NOT NULL, " +
COL_EVENT2 + " TEXT NOT NULL, " +
COL_EVENT1_ROOM + " TEXT NOT NULL, " +
COL_EVENT2_ROOM + " TEXT NOT NULL);";
private static final String DATABASE_CREATE_FTS =
"CREATE VIRTUAL TABLE " + DATABASE_TABLE_FTS + " USING fts3(" +
"content=" + "\"CONTACTS\", " +
COL_NAME + ");";
private static final String Trigger =
"CREATE TRIGGER contacts_Trigger " +
"AFTER INSERT "+ "ON " + DATABASE_TABLE +
" BEGIN " +
"INSERT " + DATABASE_TABLE_FTS + " SET " + COL_NAME + " = new.COL_NAME WHERE " + COL_ID + " = old.COL_ID;" +
" END;";
我认为“外部内容”表的选项仅适用于 FTS4,不适用于 FTS3。
外部内容 FTS4 表 http://www.sqlite.org/fts3.html#section_6_2_2
尝试使用 FTS4 表而不是 FTS3。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)