android - 如何在普通表和 fts3 表之间创建触发器?

标签 android database triggers fts3

我一直在 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。

External Content FTS4 Tables

尝试使用 FTS4 表而不是 FTS3。

关于android - 如何在普通表和 fts3 表之间创建触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886499/

相关文章:

android - 将线程执行绑定(bind)到前台服务

Android - SearchView - setTypeface 不可用

php - 从 youtube 上传视频

mysql - 一个表基于另一表的值

mysql - 使用来自单独 MySQL 表的 2 列计算平均时间

sql-server - 在同一个表上触发 INSERT 和 UPDATE

Android Twitter Fabric SDK 与支持库冲突

android - 在后台运行 Android phonegap 应用程序

mysql - 如何优化这个sql

mysql - 在破折号上触发拆分