windows sqlite3安装

Sqlite的官网只提供sqlite3.dll以及sqlite3.def这两个文件,对于准备在windows系统下开发程序在使用的时候有诸多不便,在C/C++程序中,要是有一个sqlite3.lib文件将极大的方便我们的开发。

  下面就说说如何将sqlite3.def转化为sqlite3.lib,这个法子同样适用于将其他def文件转化为lib文件,具体步骤如下:

C:\ProgramFiles\Microsoft Visual Studio\VC98\Bin>LIB.EXE /MACHINE:IX86 /DEF:sqlite3.def

Microsoft (R)Library Manager Version 6.00.8168

Copyright (C)Microsoft Corp 1992-1998. All rights reserved.

 

   Creating library sqlite3.lib and objectsqlite3.exp

  上面突出显示的部分就是需要执行的指令,具体使用办法也非常明了,对于其他def文件注意修改成对应的文件名,在输出信息中可以看到,生成了sqlite3.lib文件,而且还有赠品sqlite3.exp

  在执行上面指令的时候,需要把def文件拷贝到LIB.EXE所在的目录,最终生成的文件也在这个目录!

  唯一需要注意的就是你的VC安装路径,Coding Ants安装的是VS2008LIB.EXE所在的位置为:

C:\Program Files\Microsoft Visual Studio\VC98\Bin

 

 

 下面就直接看C/C++操作sqlite数据库的示例程序,代码如下:

#include<stdio.h>

#include <sqlite3.h>

 

void main()

{

    sqlite3 *db = NULL;

    char *zErrMsg = NULL;

    int rc;

 

    rc = sqlite3_open("test.db",&db); //打开数据库

 

    //如果连接成功,则返回SQLITE_OK,其值为0;如果失败则返回大于0的值

    if( rc )

    {

         fprintf(stderr, "Can't opendatabase: %s\n", sqlite3_errmsg(db));

         sqlite3_close(db);        //注意,这里也需要调用sqlite3_close

         return;

    }

    rc = sqlite3_exec(db, "create tabletbl1(one varchar(10), two smallint)", NULL, 0, &zErrMsg);

    if( rc != SQLITE_OK )

    {

         fprintf(stderr, "SQL error:%s\n", zErrMsg);

         sqlite3_free(zErrMsg);  //注意这里对 zErrMsg 的释放

    }

    sqlite3_close(db); //关闭数据库

}

sqlite数据库的使用非常的简单,通过sqlite3_open打开数据库,打开成功后通过sqlite3_exec执行sql语句,最后使用sqlite3_close关闭数据库。

  要让以上代码正确的运行起来,还有一些工作要做,如果你直接就编译、运行上面的代码,那么你肯定会经历下面的错误:

错误1:编译错误无法打开 sqlite3.h

fatal errorC1083: 无法打开包括文件:“sqlite3.h”: No such file or directory

解决办法:在vc的包含路径中,添加sqlite3.h所在的位置,具体设置方法为:工具选项 项目和解决方案,展开,选择“VC++目录,之后在右侧显示以下内容的目录下拉框中选择包含文件,再在底下列表框中添加对应的目录。

错误2:链接错误

1>正在链接...

1>c_connect_sqlite.obj: error LNK2019: 无法解析的外部符号 _sqlite3_free,该符号在函数 _main 中被引用

1>c_connect_sqlite.obj: error LNK2019: 无法解析的外部符号 _sqlite3_exec,该符号在函数 _main 中被引用

1>c_connect_sqlite.obj: error LNK2019: 无法解析的外部符号 _sqlite3_close,该符号在函数 _main 中被引用

1>c_connect_sqlite.obj: error LNK2019: 无法解析的外部符号 _sqlite3_errmsg,该符号在函数 _main 中被引用

1>c_connect_sqlite.obj: error LNK2019: 无法解析的外部符号 _sqlite3_open,该符号在函数 _main 中被引用

1>F:\Program\VS2008\sqlite\Debug\c_sqlite.exe: fatal error LNK1120: 5 个无法解析的外部命令

  哇,这次错误不少,看来比较麻烦,其实这个都是同一个问题,没有引入sqlite3.lib文件导致,错误的解决和错误1比较类似,错误1是添加包含文件,这里我们需要添加库文件,加上sqlite3.lib所在的位置。

  添加库文件位置后,我们还需要明确的告知程序去引入sqlite3.lib文件,有两种方法,具体如下:

1、打开项目的属性页,左侧依次展开配置属性”-“链接器”-“输入,在右侧的附加依赖性中输入 sqlite3.lib

2、在代码中的include语句后加入下面的代码

#pragmacomment(lib,"sqlite3.lib")

错误3:运行错误没有找到sqlite3.dll

没有找到sqlite3.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。

解决方法也有两个:

1、将sqlite3.dll文件拷贝到system32文件夹(中

2、将sqlite3.dll文件拷贝到当前工程目录下

 

 

 

sqlite3_exec(db,sql,NULL,NULL,&zErr);  执行一条 sql 语句的函数。函数原型:int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void*, char **errmsg ) 1个参数是前面open函数得到的指针。说了是关键数据结构。  2个参数const char *sql 是一条 sql 语句,以\0结尾。  3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。  4个参数void *     是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。  5个参数char ** errmsg 是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec 之后,执行失败时可以查阅这个指针(直接printf(“%s\n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。  说明:通常,sqlite3_callback 和它后面的 void * 这两个位置都可以填 NULL。填NULL表示你不需要回调。比如你做 insert 操作,做 delete 操作,就没有必要使用回调。而当你做 select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值