在软件项目中加入Sunisoft在线更新软件,用户监测软件版本更新时自动检测和下载新版本软件。软件功能比较简单,主要是对sqlite文件的读取。但是使用过程中发现只要连接上sqlite数据库,更新软件就会认为sqlite数据库文件已被修改,与服务器上的版本不符,需要更新该文件。通过md5比较,数据库被打开的时候并没有做任何修改。后来通过测试发现,只要文件被通过可写的方式打开,Sunisoft软件就会认为文件已经被修改,即使打开之后不做写操作。
找到原因,接下来就容易解决了。由于软件不需要对sqlite文件进行些操作,主要都是查询操作,因此可以以只读方式连接sqlite数据库。sqlite3提供只读方式打开文件接口。
int sqlite3_open_v2(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb, /* OUT: SQLite db handle */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);
第一个参数为数据库文件路径,第二个参数是输出参数,为数据库操作指针地址。第三个参数为数据库访问方式,可通过此参数配置只读方式打开数据库,可以是SQLITE_OPEN_READONLY,SQLITE_OPEN_READWRITE和SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE中的一个,用于控制数据库的打开方式,可以和SQLITE_OPEN_NOMUTEX,SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE,以及SQLITE_OPEN_PRIVATECACHE结合使用。第四个参数zVfs允许客户应用程序命名一个虚拟文件系统(Virtual File System)模块,用来与数据库连接。VFS作为SQlite library和底层存储系统(如某个文件系统)之间的一个抽象层,通常客户应用程序可以简单的给该参数传递一个NULL指针,以使用默认的VFS模块。