SQLite 检查 Table 是否为 FTS4
SQLite Check if Table is FTS4
我正在开发一个 Android 应用程序,它使用带有 FTS4 表的 SQLite 数据库。
在应用程序中,有一个选项可以从外部存储器导入数据库。需要检查此数据库以确认它具有所有正确的表和列。我已经有了执行此操作的代码,但是我不知道如何检查表是 "normal" 还是 FTS4。这将导致以后使用 MATCH
进行查询时出现问题。
我能想到的检查表是否为 FTS4 的唯一方法是使用 MATCH
进行随机查询,如果出现错误,那是因为它们不是。
有没有更好的方法来像只用一个命令那样做?
仅当 table 至少有一行时,在普通 table 上使用 MATCH 才会产生错误消息。
FTS table 有一个与 table 同名的虚拟列。所以你可以尝试像 SELECT MyTable FROM MyTable
.
这样的查询
您可以检查 shadow tables(MyTable_content
、MyTable_segdir
等)是否存在。
您可以查看系统中的 CREATE TABLE 语句 table: SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'MyTable';
我正在开发一个 Android 应用程序,它使用带有 FTS4 表的 SQLite 数据库。
在应用程序中,有一个选项可以从外部存储器导入数据库。需要检查此数据库以确认它具有所有正确的表和列。我已经有了执行此操作的代码,但是我不知道如何检查表是 "normal" 还是 FTS4。这将导致以后使用 MATCH
进行查询时出现问题。
我能想到的检查表是否为 FTS4 的唯一方法是使用 MATCH
进行随机查询,如果出现错误,那是因为它们不是。
有没有更好的方法来像只用一个命令那样做?
仅当 table 至少有一行时,在普通 table 上使用 MATCH 才会产生错误消息。
FTS table 有一个与 table 同名的虚拟列。所以你可以尝试像 SELECT MyTable FROM MyTable
.
您可以检查 shadow tables(MyTable_content
、MyTable_segdir
等)是否存在。
您可以查看系统中的 CREATE TABLE 语句 table: SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'MyTable';