上篇文章介绍了如何使用Pyhton语言来操作SQLite数据库,对于嵌入式开发,更多的是使用C/C++语言进行开发,因此,本篇介绍如何使用C语言来操作SQLite数据库。
SQLite的C语言API函数的官方文档地址:https://sqlite.com/capi3ref.html#sqlite3_free
对于数据库的基础操控,可以先了解以下几个最基本的API函数:
该函数用于打开sqlite3数据库的连接
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
参数含义:
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
参数含义:
回调函数式一个比较复杂的函数,一般用于sql语句执行后的数据打印,其原型为:
int callback(
void *params,
int column_size,
char **column_value,
char **column_name
);
参数含义:
回调函数的通常写法为:
static int callback(void *data, int argc, char **argv, char **azColName)
{
int i;
fprintf(stderr, "%s:\n", (const char*)data);
for(i=0; i<argc; i++) // argc:结果字段的个数
{
// azColName:结果字段的名称, argv:字符数组指
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int sqlite3_close(sqlite3*);
参数含义:
运行C程序,需要先下载SQLite的源码:https://www.sqlite.org/download.html
我下载的是sqlite-amalgamation-3370000.zip
解压后是两个c文件和两个h文件:
注意,sqlite的源码全部被合并成在一个 sqlite3.c 文件,代码量非常大,目前已有23万多行代码(如下图),如果不需要修改源码就不用打开该文件因为打开后可能会让你的电脑卡住一会儿。
sqlite3.c添加到工程项目中,并添加头文件的包含路径:
数据插入就是执行insert语句
const char *sql1="insert into SCORE values(11,77,88,80)";
sqlite3_exec(db, sql1, NULL, NULL, &errmsg);
数据插入就是执行select语句
const char *sql2="select * from SCORE";
sqlite3_exec(db, sql2, callback, (void*)data, &errmsg);
#include
#include "sqlite3.h"
static int callback(void *data, int argc, char **argv, char **azColName)
{
int i;
fprintf(stderr, "%s:\n", (const char*)data);
for(i=0; i<argc; i++) // argc:结果字段的个数
{
// azColName:结果字段的名称, argv:字符数组指
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main()
{
const char *sql="select * from SCORE";
char *errmsg = 0;
int ret = 0;
const char* data = "Callback function called";
// 打开数据库
sqlite3 *db = 0;
ret = sqlite3_open("test4.db",&db);
if(ret != SQLITE_OK)
{
fprintf(stderr, "Cannot open db: %s\n", sqlite3_errmsg(db));
return 1;
}
printf("Open database\n");
// 执行sql语句
//ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
ret = sqlite3_exec(db, sql, callback, (void*)data, &errmsg);
if(ret != SQLITE_OK)
{
fprintf(stderr, "sql exec fail: %s\n", errmsg);
}
sqlite3_free(errmsg);
// 关闭数据库
sqlite3_close(db);
printf("Close database\n");
return 0;
}
运行结果:
本篇简单介绍了如何使用SQLite的C语言API中最基础的几个函数,实现对数据库的读写,后续再介绍其它常用的C语言API函数的用法。