1. 下载
sqlite3官网下载如下三个包:
sqlite-amalgamation-3350500.zip
sqlite-autoconf-3350500.tar.gz
sqlite-dll-win32-x86-3350500.zip
截止本文写作日期,sqlite3的最新版本位3.35。
2. 编译
2.1 sqlite3的编译
2.1.1
首先解压sqlite-autoconf-3350500.tar.gz。
内容截图如下:
2.1.2
然后通过VS2017的命令行工具:
CD进入autoconf目录,运行如下命令:
nmake /f Makefile.msc
该命令会报如下错误:
这个错误不用管,实际上autoconf目录下已经生成了下一步需要的文件:
2.2 打包编译
2.2.1 打包
将上一步生成的几个文件:
sqlite3.def
sqlite3.h
sqlite3.exe
sqlite3.dll
sqlite3.c
打包进sqlite3文件夹。
2.2.2 VS2017新建项目
新建 Windows桌面->Windows桌面向导->动态链接库->空项目
然后将2.2.1中的五个文件添加到项目中。
2.2.3 添加预处理器定义
如下图:
预处理器定义中添加如下几项(debug和release都要添加):
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS3
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_DESERIALIZE
然后点击生成。生成过程中可能会报错,说未定义的符号啥啥的,这个时候需要将出现错误的几个库,从 sqlite3.def 中删除,删完之后就万事大吉了。
3. 测试代码
#include <fstream>
#include <sqlite3.h>
int main()
{
char pDbPath[256] = "../testSqlite/cache.db";
sqlite3* pDb = nullptr;
if (SQLITE_OK != sqlite3_open(pDbPath, &pDb))
{
printf("***ERROR***:<%s>", pDbPath);
sqlite3_close(pDb);
return 0;
}
sqlite3_stmt* pStmt = nullptr;
// std::string sSqlStatement = "select * from tiles where id=1;";
// sqlite 获取制定行号的记录
// 此处为 获取第三行的记录
std::string sSqlStatement = "select * from tiles limit 2,1;";
sqlite3_prepare(pDb, sSqlStatement.c_str(), sSqlStatement.length(), &pStmt, 0);
sqlite3_step(pStmt);
int uMemSize = sqlite3_column_bytes(pStmt, 2);
printf("=====Memory size is:<%d>.\n", uMemSize);
char* pOutBuffer = new char[uMemSize];
char* pDbBuffer = (char*)sqlite3_column_blob(pStmt, 2);
memcpy(pOutBuffer, pDbBuffer, uMemSize);
char pOutFilePath[256] = "../testSqlite/outSqlite.png";
std::ofstream outFile(pOutFilePath, std::ios::out | std::ios::binary);
outFile.write(pOutBuffer, uMemSize);
outFile.close();
printf("=====File <%s> write success.\n", pOutFilePath);
return 0;
}
本代码为本人某项目所需,因此不一定适合其他情况,但其中关于sqlite3的代码部分读者可以参考。