sqlite3 编程只需要一个头文件与一个库文件,安装请看 sqlite3 在linux系统上的安装/* filename: insert.c */

#include

#include

int main()

{

sqlite3 *db;

sqlite3_open("stu.db", &db);

char *sql = "insert into student values(10, 'james', 99)";

sqlite3_exec(db, sql, NULL, NULL, NULL);

sqlite3_close(db);

return 0;

}

如上代码,最简单的操作,只需要一个结构 "sqlite *db",

三个函数,"sqlite3_open()" "sqlite_exec()" "sqlite_close()"。

编译只需加上一个库链接$ gcc insert.c -o insert -lsqlite3

sqlite3 是一个小巧的数据库,命令,接口都很简单,手册可以去官网 www.sqlite.org 查看,也可以下载来,离线查看,官网上的链接位置如下。

入门基本函数:Documentation -> SQLite Programming Interfaces -> Introduction to the C/C++ API

参考手册:Documentation -> SQlite Programming Interfaces -> C/C++ API Reference

数据库结构体:typedef struct sqlite3 sqlite3;

sqlite3 *db;

关于这个结构体就不必多说,如上只要声名一个指针即可,如何操作都封装在库函数里了,之后用到的库函数的第一个参数大多都是这个结构体指针。

数据库的开关:int sqlite3_open(const char *filename, sqlite3 **ppDb);

int sqlite3_close(sqlite3*);

"sqlite3_open()" 有两个参数,第一个是数据库的文件名,第二个是前面声名的指针取地址。if (sqlite3_open("stu.db",&db))

{

puts(sqlite_errmsg(db));

exit(1);

}

常用的方式如上,sqlite3 中的函数保持了统一的风格,返回值表示了函数调用的结果,sqlite3 定义了 31 个基本返回值与 52 个扩展值。

(0) SLITE_OK,当函数成功时返回 0

成功就只有一种,但失败有各种失败情况,定义的 83 个返回值描述了 82 种失败的原因。

如果想打印出错误号的文字描述可以用上面的函数。const char *sqlite3_errmsg(sqlite3*);

参数是前声名的数据库结构指针,返回值是字符串指针,如上直接打印即可。

数据库的操作:int sqlite3_exec(sqlite3 *, const char *sql,

int (*callback)(void *, int, char **, char **), void *, char **errmsg);

看到如此复杂的函数,就知道了它能做很多的事情。事实上也是如此,它相当于一个 SQL 命令接口,直接把第二个参数的字符串转换成 SQL 语句去解析执行。

typedef int (*callback)(void *, int, char **, char **);

int sqlite3_exec(sqlite3 *, const char *sql, callback, void *, char **errmsg);

将第三个参数单拉出来,这样声名一个别名,"sqlite3_exec" 参数看着就很简捷了,有五个,第一个是数据库的结构体指针,第二个是 SQL 语句的字符串指针,第三个是回调函数,第四个是回调函数的参数,第五个是错误信息的字符串指针的取地址。前两个参数与最后一个参数的用法,如下。char *errmsg;

if (sqlite_exec(db, "select * from student", NULL, NULL, &errmsg))

{

puts(errmsg);

sqlite3_free(errmsg);

exit(1);

}

前两个参数很好懂,第五个参数,先声名一个指针,然后取址传给 "sqlite3_exec",此函数在调用出错时会用 "sqlite3_malloc()" 分配一个空间存放错误的字串描述,所以出错的时候用完 "errmsg" 需要用 "sqlite3_free" 释放空间。

第三个参数,回调函数的用法如下。int deal(void *arg, int ncol, char *data[], char *head[])

{

int i;

for (i = 0; i

printf("%s \t %s\n", head[i], data[i]);

}

这就上述的回调函数简单用法。有四个参数,第一个是 "sqlite3_exec" 主动传来的参数即 "sqlite3_exec" 的第四个参数。第二个参数,是查询结果的字段数,即结果的列数。第三个是查询的记录,用指针数组来存放,每个字段值用字符串存储,配合前个参数 "ncol" 就可以如上遍历整行记录了。第四个参数是表头,也是用指针数组来存储,每个字段名用字串存储,和前个参数一样用法。

重要的一点是,此回调函数是每查到一行记录就会回调一次,只处理一行记录。如果查询的结果有四行记录,就会被调用四次。

sqlite3 多线程 c语言,sqlite3 c语言编程 之 三个基本函数相关推荐

  1. 一起学习C语言:初步进入编程世界(三)

    上一篇<一起学习C语言:初步进入编程世界(二)>中,我们了解了C语言的加法运算方式和赋值运算符的用法,并通过printf函数成功输出计算结果.私下我们可以参考赋值运算表,练习更多的运算符用 ...

  2. 一起学习C语言:C语言数据类型(二)

    上一篇<一起学习C语言:C语言数据类型(一)>中,我们了解到"位与字节"的含义,并分析无符号短整形和有符号短整形的运算方式.本篇文章中,我们进行分析二进制到八进制.十六 ...

  3. C语言SQLite3基本操作Demo

    /*************************************************************************** C语言SQLite3基本操作Demo* 声明: ...

  4. php java python c语言_两分钟速览Java、PHP、C语言、Python四大编程

    Java.PHP.C语言.Python语言界的四大天王,历来一直为想成为程序猿的必经之路.山东IT培训优就业将从每个语言的基本信息.定义.优点.缺点.用途.前景.趣闻等方面逐一分析每一个语言,让你一扫 ...

  5. 【socket】C语言的Socket网络编程

    目录 Socket网络编程 1.网络知识 网络中进程之间如何通信? 什么是Socket? socket一词的起源 怎么理解端口? 怎么理解socket ? 2. 客户/服务器模式 2.1 服务器端: ...

  6. 【C语言】C语言多线程实例之pthread的应用

    [C语言]C语言多线程实例之pthread的应用 Pthread是由POSIX提出的一套通用的线程库,在linux平台下,它被广泛的支持,而windows平台下,却并不被支持,而pthreads-w3 ...

  7. C语言在嵌入式系统编程时的注意事项

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  8. C语言与OpenCL的编程示例比较

    C语言与OpenCL的编程示例比较 OpenCL支持数据并行,任务并行编程,同时支持两种模式的混合.对于同步 OpenCL支持同一工作组内工作项的同步和命令队列中处于同一个上下文中的 命令的同步. 在 ...

  9. 使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

最新文章

  1. python运维面试题_PYTHON运维开发面试题整理
  2. Java记录-SpringMVC整合Echarts画地图加散点图
  3. nginx反向代理配置实例分享
  4. 重磅!GroupFace 人脸识别,刷新 9 个数据集SOTA
  5. C#OOP之一面向对象简介
  6. MongoDB 用户管理
  7. 自动驾驶如何处理突发状况?
  8. 【HIHOCODER 1133】 二分·二分查找之k小数
  9. 4月23日云栖精选夜读:阿里AI新物种!设计机器人两年赶上资深员工水平
  10. 连载丨《极简设计:苹果崛起之道》——硅谷伊甸园(二)
  11. 中缀表达式转换为后缀表达式算法
  12. Spark运行WordCount例子
  13. CenterOS安装
  14. 第一章:Python数据分析前的基础铺垫
  15. Excel 2013 查找和替换单元格内换行回车
  16. 使用pycharm + kivy开发自己的app
  17. 使用Laravel提交POST请求出现The page has expired due to inactivity错误
  18. Asan快速定位内存越界、内存泄漏
  19. 前言-如何学习区块链
  20. mingw32-make.exe缺少的方法

热门文章

  1. Windows轻松实现linux shell环境:gitforwindows
  2. KEGG功能注释工具 KofamKOALA 安装与使用
  3. Genome Biology:人体各部位微生物组时间序列分析Moving Pictures
  4. QIIME 2用户文档. 17鉴定和过滤嵌合体序列q2-vsearch(2019.7)
  5. 微生物组——宏基因组分析专题培训开课啦!!!
  6. android switcher控件,Android ViewSwitcher 的功能与用法
  7. R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等
  8. python使用matplotlib可视化堆叠的柱状图(stacked bar plot)、多个类别的数据在分类变量层面累积堆叠起来
  9. R语言可视化散点图(scatter plot)、并在散点图中叠加回归曲线、叠加lowess拟合曲线(linear and lowess fit lines)、使用plot、line、abline函数
  10. R语言jitter函数为数据添加噪声(noise)扰动信息实战