如何验证我的sqlite3数据库是3.25版?

时间:2018-10-16 23:54:11

标签: database sqlite

我使用从https://www.sqlite.org/download.html下载的最新sqlite3.exe v3.25工具创建了一个新的sqlite3数据库。

我想验证创建的sqlite数据库为v3.25,以利用最新功能。

如何使用sqlite3.exe工具验证版本为v3.25?我欢迎这样做的其他方式。

我在这里尝试了投票率最高的答案; How to find SQLITE database file version

但是,答案无济于事。它返回库版本,而不是数据库文件版本。

我正在使用Windows 10。

1 个答案:

答案 0 :(得分:4)

根据the official specification of the database format,在数据库文件的开头有一个头,跨越前100个字节。 标头中有一些项目包含版本号:

Offset  Size    Description 
18      1       File format write version. 1 for legacy; 2 for WAL. 
19      1       File format read version. 1 for legacy; 2 for WAL. 
60      4       The "user version" as read and set by the user_version pragma.
92      4       The version-valid-for number.
96      4       SQLITE_VERSION_NUMBER

根据您的问题,您似乎想获得SQLITE_VERSION_NUMBER。 实际上,这不是“数据库版本”(也不存在这种情况),而是value for the SQLite library that most recently modified the database file

要获得该值,您只需阅读the 4-byte big-endian integer at offset 96。 因此,您可以使用python代码here(“ 我欢迎其他方式这样做。)。 我尝试用包含行的python代码创建数据库

import sqlite3
print('sqlite3 sqlite_version: ', sqlite3.sqlite_version)
(... create database ...)

已打印

sqlite3 sqlite_version:  3.31.1

,然后使用链接的代码读取数据库头。 特别是行

sqlite_version_number = unpack('>i', header[96:])[0]
print('SQLITE_VERSION_NUMBER: ' + str(sqlite_version_number))

打印

SQLITE_VERSION_NUMBER: 3031001

确认正确读取了“数据库版本号”(出于上述原因,在引号之间)。

注意:

  1. 只要有可用的python,它就可以在Windows和Linux中使用。

  2. 您可以找到其他读取标题的方法。关键是要在哪里查找所需的信息。

    2.1。 Sqlite。我找不到显示所需信息的命令。

    2.2。 Linux。 dd可以为您完成这项工作。

    2.3。电源外壳。 [System.IO.File]Get-Content可能会有所帮助。我没有对此进行进一步的探讨。