Linux C语言操作sqlite3数据库

news/2024/12/12 12:35:24/

一、环境配置

1、下载源码:sqlite-autoconf-3470200.tar.gz

2、解压,cd到源码主目录

3、配置参数

./configure --prefix=/usr/local/

如果是交叉编译环境

./configure CC=/opt/rk3288/gcc-linaro/bin/arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/opt/rk3288/sqlite3/

4、编译 & 安装

make -j8
sudo make install

二、命令行操作数据库

1、创建数据库

sqlite3 test.db

2、创建数据表

sqlite> CREATE TABLE COMPANY(ID INT PRIMARY KEY     NOT NULL,NAME           TEXT    NOT NULL,AGE            INT     NOT NULL,ADDRESS        CHAR(50),SALARY         REAL
);

3、查看数据表

sqlite>.tables
COMPANY     DEPARTMENT

4、查看表结构

sqlite>.schema COMPANY
CREATE TABLE COMPANY(ID INT PRIMARY KEY     NOT NULL,NAME           TEXT    NOT NULL,AGE            INT     NOT NULL,ADDRESS        CHAR(50),SALARY         REAL
);

5、插入表数据

sqlite>INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 );sqlite>INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 );sqlite>INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );

5、查看表数据

sqlite> select * from COMPANY;
1|Paul|32|California|20000.0
2|Allen|25|Texas|15000.0
3|Teddy|23|Norway|20000.0

6、其他指令自行查阅

三、C语言sqlite3接口

1、接口类型和函数

sqlite常用接口函数很少,官网文档可以直接看到

  • sqlite3 → The database connection object. Created by sqlite3_open() and destroyed by sqlite3_close().

  • sqlite3_stmt → The prepared statement object. Created by sqlite3_prepare() and destroyed by sqlite3_finalize().

  • sqlite3_open() → Open a connection to a new or existing SQLite database. The constructor for sqlite3.

  • sqlite3_prepare() → Compile SQL text into byte-code that will do the work of querying or updating the database. The constructor for sqlite3_stmt.

  • sqlite3_bind() → Store application data into parameters of the original SQL.

  • sqlite3_step() → Advance an sqlite3_stmt to the next result row or to completion.

  • sqlite3_column() → Column values in the current result row for an sqlite3_stmt.

  • sqlite3_finalize() → Destructor for sqlite3_stmt.

  • sqlite3_close() → Destructor for sqlite3.

  • sqlite3_exec() → A wrapper function that does sqlite3_prepare(), sqlite3_step(), sqlite3_column(), and sqlite3_finalize() for a string of one or more SQL statements.

  • sqlite3_reset()  reset bind 这个函数官网总结章节没有列出来,在绑定章节有说明

 另外还有一些不常用接口拓展函数,感兴趣的可以自己了解:

  • sqlite3_create_collation()
  • sqlite3_create_function()
  • sqlite3_create_module()
  • sqlite3_vfs_register()

  • sqlite3_aggregate_context()
  • sqlite3_result()
  • sqlite3_user_data()
  • sqlite3_value()

2、接口分类

我个人将接口分为两类

1)直接操作sql函数(初阶用法,更接近sql命令行)

sqlite3_open()打开数据库

sqlite3_exec()执行sql命令并返回结果

sqlite3_close()关闭数据库

2)sql数据绑定(高阶用法,更方便程序操作)

数据绑定分为查询绑定和插入绑定

sqlite3_prepare()        绑定sql命令

sqlite3_finalize()         结束绑定

sqlite3_reset()            重置绑定

插入绑定:

sqlite3_bind()              设置绑定列数据

sqlite3_step()              切换下一条记录

查询绑定:

sqlite3_column()         返回绑定列数据

sqlite3_step()              切换下一条记录

四、实例代码

1、打开关闭数据库

#include <stdio.h>
#include <sqlite3.h>int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int rc;rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}sqlite3_close(db);
}

2、执行sql指令

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int  rc;char *sql;/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stdout, "Opened database successfully\n");}/* Create SQL statement */sql = "CREATE TABLE COMPANY("  \"ID INT PRIMARY KEY     NOT NULL," \"NAME           TEXT    NOT NULL," \"AGE            INT     NOT NULL," \"ADDRESS        CHAR(50)," \"SALARY         REAL );";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Table created successfully\n");}sqlite3_close(db);return 0;
}

五、文章推荐

避免重复造论子,推荐以下文章:

1、sqlite3_exec()详细用法

深入理解SQLite3之sqlite3_exec及回调函数_vs2015中使用sqlite3数据库求某列的最大值,使用回调函数-CSDN博客

2、sqlite3_bind()数据绑定的插入绑定用法

sqlite3:sqlite3_bind 函数_sqlite3 bind text-CSDN博客

3、sqlite3_column()数据绑定的查询绑定用法

sqlite3:sqlite3_column 函数-CSDN博客


http://www.ppmy.cn/news/1554496.html

相关文章

《知识拓展 · 统一建模语言UML》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【jvm】垃圾回收的优点和原理

目录 1. 说明2. 优点3. 原理3.1 发现无用对象3.2 回收无用对象所占用的内存 4. 回收算法4.1 标记-清除算法4.2 复制算法4.3 标记-整理算法4.4 分代收集算法 1. 说明 1.JVM&#xff08;Java虚拟机&#xff09;垃圾回收是Java语言的一大特性&#xff0c;它自动管理内存&#xff…

【Linux】git操作

git操作 gitee为例 新建仓库并拉取到本地 在gitee上新建仓库后 我们点击这个橙色的克隆、下载 选择HTTPS的链接进行复制 我们创建一个test目录并cd进去 我们就可以把远端仓库拉取下来&#xff1a; git clone后面带上刚才复制的链接 现在test目录下就有我们拉取下来的仓库…

如何绕过IP禁令

网站、游戏和应用程序可以屏蔽特定IP地址&#xff0c;从而阻止使用该IP地址的任何人访问其服务。这称为IP禁令。管理员可以出于多种原因&#xff08;例如发出过多请求或可疑活动&#xff09;屏蔽IP地址。但是&#xff0c;这些禁令会使收集数据或访问在线内容变得更加困难。 一…

保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码 uni.request({url: https://api.weixin.qq.com/wxa/getwxacode?access_token${getStorage("token")},responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint…

《人工智能安全:挑战与破局之路》

《人工智能安全&#xff1a;挑战与破局之路》 一、人工智能安全现状二、人工智能安全面临的挑战&#xff08;一&#xff09;技术层面的挑战&#xff08;二&#xff09;伦理与社会层面的挑战 四、人工智能安全未来发展趋势&#xff08;一&#xff09;技术创新引领发展&#xff0…

【Redis源码】网络模型

Redis源码解析网络模型 基于Redis7源码的网络模型解析 前置准备 源码地址&#xff1a;https://github.com/redis/redis Ide&#xff1a;Clion 网络模型 流程节点下方是源码中对应的方法 总结点 Redis 的网络是IO多路复用指令还是单线程串行 扩展的线程池&#xff0c;协助主…

需求场景:查询条件多选时,列表单列实时值分接口获取

文章目录 一、所有条件组合成列表数据&#xff08;Demo&#xff09;二、后台进行有效数据快速筛选&#xff08;Demo&#xff09; 查询条件多选时&#xff0c;条件为或的关系&#xff0c;那么最终条数为&#xff1a;条件1 * 条件2&#xff1b;如果一起查询时接口统一返回这些数据…