database - 如何判断sqlite数据库文件是否有效

标签 database file sqlite detection

在下面的代码中,pathToNonDatabase 是一个简单文本文件的路径,而不是一个真正的 sqlite 数据库。我希望 sqlite3_open 检测到它,但它没有(db 不是 NULL,并且 resultSQLITE_OK)。那么,如何检测文件不是有效的 sqlite 数据库?

sqlite3 *db = NULL;
int result = sqlite3_open(pathToNonDatabase, &db);

if((NULL==db) || (result!=SQLITE_OK)) { 
   // invalid database
}

最佳答案

sqlite 延迟打开数据库。打开后立即做一些需要它是数据库的事情。

最好的可能是 pragma schema_version;

  • 如果尚未创建数据库(例如,一个空文件),这将报告 0。在这种情况下,使用(并运行 CREATE TABLE 等)
  • 是安全的
  • 如果数据库已创建,它将返回架构经历了多少次修订。这个值可能并不有趣,但它不为零才是。
  • 如果文件存在但不是数据库(或空文件),您将收到错误消息。

如果您想进行更彻底的检查,可以使用 pragma quick_check;。这是一个轻量级的完整性检查,它跳过检查表的内容是否与索引对齐。它仍然可能非常慢。

避免integrity_check。它不仅会检查每一页,还会根据索引验证表的内容。这在大型数据库上肯定是冰川。

关于database - 如何判断sqlite数据库文件是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888529/

相关文章:

mysql计算几列

mysql - swingbench 数据生成器连接字符串

Python 程序在读取文本文件时打印一个额外的空行

swift 4 |正在引用数据库文件进行 SQLite 查询 "unable to open database file"

android - SQLite 子查询不工作

java - 如何将reducer的输出写入数据库?

c - 如何从 C 文本文件中读取数字 block

.net - SSD 驱动器上奇怪的目录删除行为

c++ - 'sqlite3_api' 未在此范围内声明

r - 合并正在复制 r 中的行