大二,大三花了不少时间来学习sqlite3的源码,之前一直是通过文档记录 没有写成博客。现在打算通过博客交流自己的成果,但需要强调的是,博客中可能会有个人理解偏差而出现出错误。
一:Sqlite3的下载:
需要在官网上下载几个文件,下载最新版本的。
二:sqlite3配置使用
然后将sqlite-tools文件中的sqlite3.exe文件配置到环境变量中,然后就可以在命令框中调用sqlite3数据库了。
三:源码部署
部署准备
我要说的不是sqlite3的使用,是sqlite3源码的部署。
部署环境:win10下的VS2013。
部署前需要.lib和.def两个文件,其中.lib是需要自己生成的,这里可以通过下面的方法生成。
1:进入VS2013目录拷贝lib.exe,link.exe以及mspdb110.dll,目录为E:\VS2013\VC\bin
2:2. Sqlite目录中需要有sqlite的sqlite3.h,sqlite3.def,sqlite3.dll。
3:将以上所有文件放在sqlite目录中,通过cmd命令进入sqlite目录中,通过命令LIB /MACHINE:IX86 /DEF:sqlite3.def生成lib静态库文件。这里针对64位的pc命令会有所不同。如果是64位的系统的话,命令应该改为:LIB /MACHINE:X64/DEF:sqlite3.def. 值得一提的是,上述两种方法编译过程中,都需要针对你所用的pc位数进行匹配,即32位需要使用32位的库。64位则使用64位的库,这个如果弄错了,则无法生成lib库。我的pc上使用的是64位的操作系统。
完成上面步骤后就会生成.lib文件,然后就可以部署了。
VS下的部署
创建一个win32的控制台应用程序,且是空项目:
然后引入下列文件
1、.h的引入
引入了.h才能使用类.
首先在工程中引入.h文件,然后在文件中:#include "sqlite3.h"。
这时需要配置引入.h文件的位置。引入方法如下
在创建的项目找到以下目录
配置项目属性:c/c++ 常规 附加包含目录
2、.lib文件的引入
引入方法:
项目 属性 链接器 输入 附加依赖项 sqlite3.lib
编译:
错误 1 fatal error LNK1104: 无法打开文件“sqlite3.lib” Sqlite
想想错误原因:工程怎么知道sqlite3.lib在哪里?
解决办法1:把lib烤到工程目录下(这种方法有时不可行):d:\工作\vc\sqlite\sqlite\
解决办法2:把lib拷到目录\lib目录下,然后设置:
项目 属性 链接器 常规 附加库目录
3、dll库的引入
只需把sqlite3.dll拷到工程目录下。
这样就行了吗?可以运行Debug编译好的程序了吗?不行,如果要运行Debug下的程序,需要将sqlite3.dll也拷贝到Debug目录下。
4:运行效果测试
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <sqlite3.h>
int main()
{
sqlite3 *db = NULL;
int result;
result = sqlite3_open("test.db", &db);
if (SQLITE_OK != result)
{
printf("Create/Open test.db error! \n");
}
printf("Create/Open test.db success!! \n");
const char *sqlStr1 = "create table table2(sid integer primary key not null,age string);";
result = sqlite3_exec(db, sqlStr1, 0, 0, 0);
if (SQLITE_OK != result)
{
printf("create table table1 error! \n");
return 0;
}
printf("create table table1 success! \n");
const char* sqlStr2 = "insert into table1() values(1,'name1');";
result = sqlite3_exec(db, sqlStr2, 0, 0, 0);
if (SQLITE_OK != result)
{
printf("insert table table1 error! \n");
return 0;
}
printf("insert table table1 success! \n");
sqlite3_close(db);
return 0;
}