我正在将自定义Sqlite构建打包在我的应用程序中,并带有HTMLtokenizer以与FTS一起使用。我实际上是在房间里创建FTS表。
CREATE VIRTUAL TABLE IF NOT EXISTS subitem_content USING fts4(item_category_id, item_id, subitem_id, title, html, tokenize=HTMLTokenizer eng)
我还称呼以下内容:
System.loadLibrary("sqliteX")
链接自定义sqlite版本和
System.loadLibrary("tokenizers")
将打包的Tokenizers库链接到项目。
然后我使用以下命令将令牌生成器注册到数据库中
sqliteDb.loadExtension("libtokenizers")
sqliteDb.registerTokenizer(Tokenizer.HTML_TOKENIZER)
这似乎很好。我可以将数据插入表中并查询数据就可以了。直到我关闭应用程序并重新启动它,然后收到以下错误:
org.sqlite.database.sqlite.SQLiteException: unknown tokenizer: HTMLTokenizer (code 1): , while compiling:
如果我清除了应用程序数据并重新启动,那么第一次运行就可以了,但是在重新启动应用程序时崩溃了。 我检查了/ proc / pid / map以确保已加载本机库,并且它们在数据库事务处理时显示在此处。重新启动后为什么会出现此错误?
答案 0 :(得分:1)
首次运行应用程序时,您只创建一次数据库。 但是,只要使用数据库,令牌生成器就必须可用,因此,只要有新的数据库连接,就必须注册它。
适当的位置是您创建新连接的任何地方;在原始的Android数据库API中,该名称为onConfigure callback。