Linux C语言操作sqlite3数据库
一、环境配置
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博客
相关文章:
Linux C语言操作sqlite3数据库
一、环境配置 1、下载源码:sqlite-autoconf-3470200.tar.gz 2、解压,cd到源码主目录 3、配置参数 ./configure --prefix/usr/local/ 如果是交叉编译环境 ./configure CC/opt/rk3288/gcc-linaro/bin/arm-linux-gnueabihf-gcc --hostarm-linux --pre…...
【人工智能】因果推断与数据分析:用Python探索数据间的因果关系
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 因果推断是数据科学领域的一个重要方向,旨在发现变量间的因果关系,而不仅仅是相关性。本篇文章将从因果推断的理论基础出发,介绍因果关系的定义与建模方法,涵盖因果图(Causal Graph)、d-分离、反事实估计等…...
freeswitch(30秒自动挂断)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: A和B接通通话时候,时间开始计算到达30秒后自动挂断使用方法 进入/usr/local/freeswitch/etc...
大模型呼入机器人有哪些功能特点?(转)
大模型呼入机器人有哪些功能特点?(转) 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 大模型呼入机器人,作为现代通信技术与人工智能深度融合的产物,正逐渐成为企业提升服务…...
网络工程师常用软件之配置对比软件
「24-配置比对软件-汉化WinMerge」 链接:https://pan.quark.cn/s/cef7541d62d1 ################################################################################ 我们经常在项目或者运维中对设备的config进行变更,那么我们如何快速的知道变更了什么…...
Linux之远程登录
一、使用ssh命令登录 winR打开cmd输入命令 # root是命令,192.168.101.200是地址 ssh root192.168.101.200是否要保存密码,就是yes以后可以免密登录,这里就yes了 输入密码,就登录成功了 操作完成之后,输入命令退出 e…...
#渗透测试#漏洞挖掘#红蓝攻防#js分析(上)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
数智读书笔记系列006 协同进化:人类与机器融合的未来
书名:协同进化:人类与机器融合的未来 作者:[美]爱德华阿什福德李 译者:李杨 出版时间:2022-06-01 ISBN:9787521741476 中信出版集团制作发行 爱德华・阿什福德・李(Edward Ashford Lee)是一位在计算机科学与工程领域颇具影响力的学者&am…...
操作系统(7)处理机调度
前言 操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。 一、调度的层次 高级调度(作业调度): 调度对象:作业(包含程序…...
folly之侵入式链表
侵入式链表 侵入式链表(Intrusive Linked List)是一种数据结构,它的节点不是通过包含链表节点的对象来实现的(像非侵入式链表那样),而是通过在节点对象中直接包含指向其他节点的指针来实现的。这意味着链表节点对象本身需要被修改以包含指向链表其他部分的指针。 直接上…...
GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析
# GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析 近期,GPT-5 的训练进展引发了广泛关注与诸多讨论,令人遗憾的是,其训练并未达到预期目标,且难以在规定时间内交付。这一状况不仅让期待它的人们大感意外…...
C缺陷与陷阱 — 3 深入理解表达式
目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,ÿ…...
Linux常用指令-----中
Linux常用指令----上 Linux常用指令----下 Linux系列 文章目录 Linux系列前言一、man指令(重要)二、cp指令(重要)三、echo指令四、cat指令五、mv指令六、which指令七、alias指令总结 前言 接下来我们介绍的指令是承接上篇&#…...
k8s 部署方式kustomization和helm的区别
Kustomize 和 Helm 是 Kubernetes 中两种流行的配置管理工具,它们都用于管理 Kubernetes 资源,但它们的设计理念、功能和适用场景有所不同。以下是两者的详细对比: 1. 基本概念 Kustomize 功能:原生于 Kubernetes 的工具&#x…...
Alogrithm:骑士走棋盘
1. 说明 骑士旅游(Knights tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置? 2. 解法 骑士旅…...
Oracle 与 达梦 数据库 对比
当尝试安装了达梦数据库后,发现达梦真的和Oracle数据库太像了,甚至很多语法都相同。 比如:Oracle登录数据库采用sqlplus,达梦采用disql。 比如查看数据视图:达梦和Oracle都有 v$instance、v$database、dba_users等&a…...
[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners
本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...
【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)
发现了一个使用Selenium的find_element模块,快速获取文字和表格的方法,很实在,以后爬网的时候,就不用beautifulSoup 和 pandas的read_html 混起来用了! 文字部分:实现网络节点下,某个节点下的其…...
蓝桥杯刷题——day4
蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年,他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第2…...
内网是如何访问到互联网(H3C源NAT)
H3C设备NAPT配置 直接打开29篇的拓扑,之前都配置好了 「模拟器、工具合集」复制整段内容 链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1,下面的终端访问不了,需要做NAPT源…...
音频格式解密实战:QMCDecode让加密音乐重获自由
音频格式解密实战:QMCDecode让加密音乐重获自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果…...
从“存查”到“懂用”:基于 SKC 的企业知识闭环实战
文章目录一、引言: 从“存查”到“懂用”的破局之路二、核心理念:从“知识仓库”到“能力转化引擎”三、实操指南:三步构建知识闭环四、场景演示:新员工入职的“加速跑”五、结语:激活知识价值,打造企业成长…...
Win11Debloat完全指南:3步打造纯净高效的Windows 11系统
Win11Debloat完全指南:3步打造纯净高效的Windows 11系统 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...
G-Helper深度解析:华硕笔记本轻量级控制工具的技术架构与实战手册
G-Helper深度解析:华硕笔记本轻量级控制工具的技术架构与实战手册 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF…...
LN3608 2A 高效率升压 DC/DC 电压调整器
■ 产品概述 LN3608 是一款微小型、高效率、升压型 DC/DC 调整器。电路由电流模 PWM 控制环路,误差放大器,斜波补偿电路,比较器和功率开关等模块组成。该芯片可在较宽负载范围内高效稳定的工作,内置一个 4A 的功率开关和软启动保护…...
LeetCode刷题笔记:用动态规划一口气搞定6道回文串问题(附Java代码)
动态规划解回文问题:从子串到子序列的通用解法 回文串问题在算法面试中出现的频率居高不下,无论是统计回文子串数量、寻找最长回文子串,还是处理回文子序列,动态规划(DP)都是解决这类问题的利器。本文将带你系统掌握六种经典回文问…...
告别答辩 PPT 加班地狱!Paperxie AI PPT,一键生成本科生专属高分答辩模板
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 一、本科生的答辩 PPT 困局:为什么你熬到三点还在改? 毕业论文写完的那一刻,以为终于能松…...
League Akari:英雄联盟玩家的终极自动化工具箱完整指南
League Akari:英雄联盟玩家的终极自动化工具箱完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款专为《英…...
目标金额是否能被给定硬币组成或者最少硬币数量
在编程中,判断一个目标金额能否由一组给定的硬币组成,这是一个经典的“硬币找零”或“完全背包”问题。 最常用且高效的解决方法是使用动态规划 核心思路 将这个问题分解成更小的子问题。 是不是在想当前金额,怎么知道能够由哪些已知硬币凑成…...
解锁高速下载体验:这款开源工具如何彻底解决网盘限速难题
解锁高速下载体验:这款开源工具如何彻底解决网盘限速难题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...
