SQLite体积小、功能强、易于使用,是开发文件型数据库应用的理想选择。其官网提供了详尽的开发文档,相关教程丰富全面,API简单易用。之前我分享了在Qt中读写数据库的经验,今天我们就探讨如何在纯C/C++环境下操作SQLite数据库的读写功能。
1、 用动态链接库开发更合适,下载的sqlite3程序已包含sqlite3.dll和sqlite3.def文件,可以通过VS工具生成lib文件用于编程。但由于我不使用VS,也不想为此专门安装,因此选择自行编译一个静态库。实际上,动态库的使用方式也与此类似。
2、 以下是sqlite3程序及其源代码:

3、 接下来,我们开始编译sqlite3静态库。打开DevC++,新建一个名为sqlite_lib的静态链接库项目,所示。
4、 若不懂如何使用devc++,可查阅我的另一篇相关经验。
5、 Dev-C++的使用与调试技巧

6、 将项目保存至提前创建好的文件夹,命名为sqlite_lib。

7、 把源代码里的sqlit3.h和sqlite3.c复制到sqlite_lib文件夹。接着,在devcpp项目上右键选择添加。

8、 接着,把sqlite3.h和sqlite3.c加入到项目中。

9、 接下来,点击编译按钮,或选择运行菜单中的编译选项,也可直接按下F9键启动编译过程。
10、 当前编译模式为调试模式。

11、 编译过程十分顺利,没有任何警告,成功完成。
12、 同时生成了sqlite_lib.a静态库文件。

13、 编写相应代码并不复杂,一起看看sqlite官网如何描述的。
14、 此代码仅通过三个函数,便实现了数据库的创建、读写及关闭操作,简洁高效。
15、 直接调用SQLite提供的函数实现功能。

16、 我们直接使用官网代码,测试是否能正常运行。
17、 在DevCpp中新建一个控制台项目,所示。
18、 项目存储在另一个名为sqlite_lib_demo的目录中。

19、 把官网示例代码复制到main.c文件里,同时将sqlite3.h头文件和刚生成的sqlite_lib.a库文件,一并拷贝到sqlite_lib_demo文件夹中。
20、 点击项目菜单中的项目属性,打开选项窗口并切换到参数标签页。

21、 点击添加入库或对象,选中sqlite_lib.a,依次点击打开与确定按钮完成操作。

22、 最后编译项目时出现错误,提示缺少sqlite3.h文件或目录。
23、 这个问题很简单,我们只需将
24、 改为
25、 即可

26、 重新编译后顺利完成,尝试运行却发现无法直接执行,打印提示显示存在错误。

27、 打开命令提示符,切换至程序所在目录。
28、 接着,我们创建了名为mydata.db的数据库文件,建立student表,并插入三条记录。
29、 程序看似运行无异常。

30、 我们来检查一下刚才的操作是否真的没有问题。
31、 程序运行效果良好,一目了然。

32、 让我们再次回顾一下代码。
33、 首先定义一个sqlite3对象的指针变量:sqlite3 *db;用于数据库连接操作。
34、 接着,调用sqlite3_open函数打开数据库,将结果赋值给db,同时返回打开是否成功。
35、 接着,利用 sqlite3_exec 函数执行 SQL 语句即可。
36、 操作过程中若出现错误,或全部执行完毕无误后,调用sqlite3_close关闭连接。
37、 sqlite3_exec函数的参数包含一个函数指针,下面参考官方文档进行解释。

38、 官网表示,若 sqlite3_exec 的第三个参数非 NULL,则会被调用以输出 SQL 执行后的每一行结果。
39、 让我们一起看看是否如此。
40、 原来如此。

41、 我们生成一个release模式的静态库与可执行文件进行查看。
42、 一个700多K,一个900多K,确实体积不小。
