重新启动应用程序后,SQLite 抛出 "Unknown Tokenizer" 异常
Sqlite throws "Unknown Tokenizer" exception after restarting app
我正在我的应用程序中打包一个自定义的 Sqlite 构建,其中包含一个 HTMLtokenizer 以与 FTS 一起使用。我用虚拟空间创建了 FTS table。
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")
到 link 自定义 sqlite 构建和
System.loadLibrary("tokenizers")
到 link 打包的 Tokenizers 库到项目。
然后我使用以下命令将分词器注册到数据库
sqliteDb.loadExtension("libtokenizers")
sqliteDb.registerTokenizer(Tokenizer.HTML_TOKENIZER)
这似乎工作正常。我可以将数据插入 table 并查询数据就好了。直到我关闭应用程序并重新启动它,我收到以下错误:
org.sqlite.database.sqlite.SQLiteException: unknown tokenizer: HTMLTokenizer (code 1): , while compiling:
如果我清除应用程序数据并重新启动,第一次一切正常,但在重新启动应用程序时崩溃。
我检查了 /proc/pid/map 以确保本地库已加载,并且它们在数据库事务处理时显示在那里。为什么重启后会出现这个错误?
当您第一次 运行 应用程序时,您只创建了一次数据库。
但是无论何时使用数据库,分词器都必须可用,因此无论何时有新的数据库连接,都必须注册它。
合适的地方是你创建新连接的地方;在原始 Android 数据库 API 中,这将是 onConfigure callback.
我正在我的应用程序中打包一个自定义的 Sqlite 构建,其中包含一个 HTMLtokenizer 以与 FTS 一起使用。我用虚拟空间创建了 FTS table。
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")
到 link 自定义 sqlite 构建和
System.loadLibrary("tokenizers")
到 link 打包的 Tokenizers 库到项目。
然后我使用以下命令将分词器注册到数据库
sqliteDb.loadExtension("libtokenizers")
sqliteDb.registerTokenizer(Tokenizer.HTML_TOKENIZER)
这似乎工作正常。我可以将数据插入 table 并查询数据就好了。直到我关闭应用程序并重新启动它,我收到以下错误:
org.sqlite.database.sqlite.SQLiteException: unknown tokenizer: HTMLTokenizer (code 1): , while compiling:
如果我清除应用程序数据并重新启动,第一次一切正常,但在重新启动应用程序时崩溃。 我检查了 /proc/pid/map 以确保本地库已加载,并且它们在数据库事务处理时显示在那里。为什么重启后会出现这个错误?
当您第一次 运行 应用程序时,您只创建了一次数据库。 但是无论何时使用数据库,分词器都必须可用,因此无论何时有新的数据库连接,都必须注册它。
合适的地方是你创建新连接的地方;在原始 Android 数据库 API 中,这将是 onConfigure callback.