System.Data.SQLite:检查SQLite数据库是否为空(任何表中至少有一行)

问题描述 投票:0回答:1

我需要检查 System.Data.SQLite 库,确保我的 SQLite 数据库不为空(任何表中至少有一行)。现在,我从

sqlite_master
表获取表名称,然后使用
SELECT * FROM [TableName] LIMIT 1
查询每个表。

但我正在寻找一种更优化的方法。是否可以通过一次

.ExecuteQuery<T>()
通话来实现?

c# sqlite ado.net system.data.sqlite
1个回答
0
投票

有趣的问题。据我所知,没有可以运行的简单单个查询来执行此操作,但您可以使用

ANALYZE
命令和生成的
sqlite_stat1
表来弄清楚。

当您将

ANALYZE
作为非查询语句运行时,它会创建
sqlite_stat1
表并使用一些数据(包括表的行数)填充该表。有助于解决您的问题的技巧是:输出中不列出零行的表。

这为我们提供了一个单行解决方案的选项,该解决方案在 SQLite 中运行两个语句来给出您想要的答案:

bool IsEmpty = db.SqlQuery<int>($"ANALYZE;SELECT COUNT(*) FROM sqlite_stat1").ToArray().Single() == 0;

虽然不漂亮,而且它确实会影响数据库状态,但至少很简单。

当然,

ANALYZE
命令会扫描数据库,因此如果有大量数据和/或索引,则需要一些时间。

© www.soinside.com 2019 - 2024. All rights reserved.