如何利用SQLite Append VFS将数据库附加至可执行文件?
如何用SQLite的Append VFS将数据库附加到可执行文件?
刚好之前实操过Append VFS的用法,这就给你一步步拆解具体操作:
1. 先搞定带Append VFS的SQLite工具
默认的SQLite并没有内置Append VFS模块,所以得先编译一个支持它的版本:
- 从SQLite官网下载amalgamation版源码(就是那个单一的
sqlite3.c文件,搭配sqlite3.h) - 用gcc编译时加上
-DSQLITE_ENABLE_APPENDVFS选项,命令如下:
编译完成后,你就得到了一个支持Append VFS的gcc sqlite3.c -o sqlite3 -DSQLITE_ENABLE_APPENDVFS -lpthread -ldlsqlite3命令行工具。
2. 准备好目标文件和数据库
- 你要附加的可执行文件(比如
my_app或my_app.exe),确保它能正常运行(附加操作不会破坏原文件) - 已经创建好的SQLite数据库文件(比如
my_data.db,里面可以提前建好表和数据)
3. 执行附加操作
打开终端,用编译好的sqlite3工具来完成附加:
方式一:进入交互模式后附加
- 启动
sqlite3交互工具:./sqlite3 - 执行ATTACH命令,指定Append VFS:
ATTACH DATABASE 'my_app?my_data.db' AS attached_db VFS 'appendvfs';my_app是你的可执行文件名my_data.db是要附加的数据库文件名attached_db是附加后数据库的别名,方便后续操作
方式二:直接打开附加后的数据库
也可以直接在启动sqlite3时指定目标文件和VFS:
./sqlite3 'my_app?my_data.db' -vfs appendvfs
4. 验证操作是否成功
在sqlite3交互模式下,执行.databases命令,你会看到附加的数据库出现在列表里:
sqlite> .databases main: /path/to/my_app?my_data.db attached_db: /path/to/my_app?my_data.db
也可以执行查询语句验证数据是否能正常读取:
SELECT * FROM attached_db.my_table;
额外说明与注意事项
- 附加后,原可执行文件完全可以正常运行,因为Append VFS是把数据库数据追加到文件末尾,不会修改原文件的有效内容
- 你可以像操作普通SQLite数据库一样修改附加的数据库,所有变更都会自动写到可执行文件的末尾
- 除了可执行文件,Append VFS还能把数据库附加到任何类型的文件上(比如文本、图片、压缩包等)
- 如果是在自己的C程序中使用,只需调用
sqlite3_open_v2()时,第三个参数传入"appendvfs",数据库名格式同样是"目标文件名?数据库名"
内容的提问来源于stack exchange,提问作者Kağan Kayal
相关产品推荐
相关产品推荐

