零字节文件是有效的sqlite数据库吗?

零字节文件是有效的sqlite数据库吗?,sqlite,Sqlite,当我对带有标志SQLITE\u open\u READWRITE的零字节文件调用sqlite3\u open\u v2()时,函数返回零。然后,“PRAGMA quick_check;”语句返回一行,其中包含字符串“ok”。所以零字节文件被认为是有效的数据库?似乎有点违反直觉?我不认为这是“有效的”。如果它是零字节,那么除了一个引用之外,它什么都不是。是的,你可以打开它。但如果文件的字节数大于等于1,则该操作无效 所以只要文件是0字节,就可以打开它;一旦开始进行更改,它将成为一个SQLite文件

当我对带有标志SQLITE\u open\u READWRITE的零字节文件调用sqlite3\u open\u v2()时,函数返回零。然后,“PRAGMA quick_check;”语句返回一行,其中包含字符串“ok”。所以零字节文件被认为是有效的数据库?似乎有点违反直觉?

我不认为这是“有效的”。如果它是零字节,那么除了一个引用之外,它什么都不是。是的,你可以打开它。但如果文件的字节数大于等于1,则该操作无效

所以只要文件是0字节,就可以打开它;一旦开始进行更改,它将成为一个SQLite文件

如果打开一个非SQLite文件并尝试进行更改,则会显示一条错误消息:

错误:文件已加密或不是数据库

创建新的空数据库的(唯一)方法是尝试打开一个不存在的文件。 零大小的文件被认为是相同的;它只是一个空数据库

在打开的数据库连接中必须设置一些设置(如),但这会影响数据库文件的结构。
因此,SQLite会延迟实际写入数据库结构,直到实际需要它为止。

可能是一个没有架构、表或数据的结构。(这很模糊,可能对任何人都没有帮助,但是…)我正在打开一个零字节的文件,但在运行CREATE TABLE语句时看到“无法打开数据库文件”。结果表明,sqlite拥有使用零字节文件的权限,但由于该目录中的权限锁定,sqlite无法创建必要的支持临时文件。我认为那不是真的。如果我触摸一个文件(linux),我仍然可以用sqllite打开这个文件并开始创建表。假设文件为空。这与我写的内容有何矛盾?您写的是一个不存在的文件。一个零字节的文件,仍然是一个文件。只要是0,它就应该仍然有效。