Sqlite 在重新启动应用程序后抛出"Unknown Tokenizer"异常



我正在我的应用程序中打包一个自定义的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,以确保本地库已经加载,并且它们在数据库事务时显示在那里。为什么重新启动后会出现此错误?

当您第一次运行应用程序时,您只创建了一次数据库。但是,无论何时使用数据库,标记器都必须可用,因此无论何时建立新的数据库连接,都必须注册它。

合适的地方是你创建新连接的地方;在最初的Android数据库API中,这将是onConfigure回调。

最新更新