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月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
134 6
|
3天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
48 15
|
21天前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
23 1
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
75 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
38 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
36 4
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
43 0
|
4天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
8天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
16天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据