SQLite 数据库 C 编程接口介绍 | 学习笔记

简介: 快速学习 SQLite 数据库 C 编程接口介绍

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 数据库 C 编程接口介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11235


SQLite 数据库 C 编程接口介绍


内容介绍:

一、SQLite C 编程

1.打开、关闭数据库函数

2.Sqlite3 中执行 SQL 语句的方法(回调方法)

3.Sqlite3 中执行 SQL 语句的方法(非回调方法)

 

一、SQLite C 编程

主要用到四个函数,打开;关闭;回调方法;非回调方法。

下图是源代码和头文件,头文件提供了很多函数接口,主要用到的是以上四个。

Makefile:

OBJ+=example.0

OBJ +=sqiite3.0

FLAGS =-wall

CC = gcc

example : $ (OBJ)

$ (cc) $ (OBJ) -o $ $ (FLAGS) -lpthread -ldl

%.o:%.c

s (cc) -c $^-o $$ (FLAGS)

.PHONY :clean

clean :

rm example *.o -rfv

Makefile 编译的对象是 sqlite3.0,为什么用 Makefile 编译:因为 sqlite 代码比较多,编译时间较长,如果编译完 sqlite,由 Makefile 进行时间戳的管理,下一次改写业务程序是不需要编 sqlite3.0,这样就提高了调试的效率。

打开一个新的窗口,观看程序,里面只包含头文件。

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include "sqlite3.h"

int main (int argc, char **argv)

{

return 0;

}

在窗口进行编译,发现时间比较长,正常情况下编写程序只需 1~2 秒,但是如果下一次在进行编译,时间就变短了,因为sqlite已经编好了。

edu@edu : sqlite$make

gcc -c example.c -o example.o -wall

gcc -c sqlite3.c -o sqlite3.o -wall

sqlite3.c:8153:26: warning: 'sqlite3one’defined but not used [-Munused-const-variable=]

SQLITE_PRIVATEconst int sqlite3one = 1;

1.打开、关闭数据库函数

int sqlite3_open(char *db_name,sqlite3 **db);

通过 open 打开数据库,在代码中要调用函数 sqlite3_open()

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include "sqlite3.h"

int main (int argc, char **argv)

{

sqlite3_open()

return 0;

}

sqlite3 **db 句柄,无论是后续关闭,执行语句都是基于这个参数。

功能: 打开数据库。

参数:db_name: 数据库文件名,若文件名包含 ASCII 码表范围的之外的字符,则其必需是(UTF-8)编码。sqlite3: 数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。

返回值: 成功返回 SQLITE_OK,失败返回非 SQLITE_OK。

Sqlite 数据库最大特点是它的数据并不是通过返回值实现传递,而是通过参数,返回值是告诉操作是否成功,成功返回 SQLITE_OK,失败返回非 SQLITE_OK,不是ok 就要去查错误列表。

int sqlite3_close(sqlite3 *db);

功能:关闭数据库、释放打开数据库时申请的资源。

参数: db:数据库的标识。

返回值: 成功返回 SQLITE_OK。失败返回非 sQLITE_OK。

注意: sqlite3 使用了两个库: pthread、dl,故链接时应加上 -lpthread 和 -ldl。

2.Sqlite3 中执行 SQL 语句的方法(回调方法)

sqlite3_exec 函数:

int sqlite3_exec(sqlite3*db,

const char *sql,——实际是不可修改的字符串

exechandler_t callback,

回调函数,如果没有结果可传null,如果不为空,在回调函数中处理得到的结果。

void *arg,

char**errmsg);

功能:执行 sql 指向的 SQL 语句,若结果集不为空,函数会调用函数指针 callback所指向的函数。

参数: db: 数据库的标识。

sql: SQL 语句(一条或多条),以’;’结尾。

calback: 是回调函数指针,当这条语句执行之后,sqlite3 会去调用你提供的这个函数。

arg: 当执行 sqlite3_exec 的时候传递给回调函数的参数。

errmsg: 存放错误信息的地址,执行失败后可以查阅这个指针。

打印错误信息方法: printf("%sin", errmsg);

回调函数指针:

typedef int (*exechandler_t)(void*para,

int n_column,

char**column_value,

char**column_name);

功能: 此函数由用户定义,当 sqlite3_exec 函数执行 sql 语句后,结果集不为空时sqlite3_exec 函数会自动调用此函数,每次调用此函数时会把结果集的一行信息传给此函数。

参数: para: sqlite3_exec 传给此函数的参数,para 为任意数据类型的地址。

n_column: 结果集的列数。

column_value: 指针数组的地址,其存放一行信息中各个列值的首地址。

column name: 指针数组的地址.其左放一行信息中各个列值对应列名的首地址。

返回值: 若为非 0 值,则通知 sqlite3_exec 终止回调。

我们可以通过以上回调函数查看表信息,如果想查看更多信息,就要用到下面的函数。

3.Sqlite3 中执行 SQL 语句的方法(非回调方法)

sqlite3_get_table 函数:是专门用来获取表信息的,可以配合 select 使用。

int sqlite3_get_table(sqlite3*db,

const char *sql,

char ***resultp,

int *nrow,

int *ncolumn,

char**errmsg);

功能: 执行 sql 指向的 SQL 语句,函数将结果集相关的数据的地址保存在函数的参数中。

参数: db: 数据库的标识。

sql: SQL 语句(一条或多条),以’;’结尾。

resultp: 指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每一行各列的值。

nrow: 结果集的行数(不包含列名)。

ncolumn: 结果集的列数。

errmsg: 错误信息。

sqlite3_free_table 函数:

void sqlite3_free_table(char**resultp);

功能: 释放 sqlite3_get_table 分配的内存。

参数: 结果集数据的首地址。

空间是动态获得的,当空间用完之后要释放空间。下节课主要讲数据库怎样通过函数接口进行操作。

数据结果如下

Id、name、city、score 是第一行,依次类推后面的是个数据分别对应 id、name;是按找先行后列的形式存储的,故在遍历时要知道存储关系。

相关文章
|
2天前
|
数据库 数据库管理 关系型数据库
|
3天前
|
数据库
编程日记02:个人站优化数据库和日志
编程日记02:个人站优化数据库和日志
9 0
|
5天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
9 0
|
14天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
14天前
|
SQL 存储 Ubuntu
在ubuntu中将dict.txt导入到数据库sqlite3
这样,你就成功将 `dict.txt` 中的数据导入到名为 `mydatabase.db` 的SQLite3数据库中的 `words` 表格中了。请根据实际情况调整表格结构和数据导入命令。
18 0
|
18天前
|
SQL 关系型数据库 MySQL
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
|
19天前
|
SQL 关系型数据库 MySQL
第十三章 Python数据库编程
第十三章 Python数据库编程
|
19天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
19天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
10 0