当前位置: 首页 > news >正文

【C语言数据库】Sqlite3基础介绍

1. SQLite简介

SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bundled inside countless other applications that people use every day.

SQLite是一个C语言库,它实现了一个小型、快速、独立、高可靠性、功能齐全的SQL数据库引擎。 SQLite 是世界上使用最广泛的数据库引擎。SQLite内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。

D. Richard Hipp于2000年春设计了SQLite(最初是作为Tcl扩展),设计目的是让程序无需安装数据库管理系统或不需要数据库管理员即可运行。与Client-Server DBMS(客户端-服务器端数据库管理系统)不同,SQLite没有与应用程序通信的独立进程。而是将SQLite库(静态或动态)集成到应用程序中,该应用程序通过调用函数来使用SQLite的功能,从而减少数据库操作的延迟。对于不需要高并发的简单查询,SQLite的性能得益于避免进程间通信的开销。

SQLite将整个数据库(table、index和data)存储为单个文件,允许多个进程或线程同时访问同一数据库(写入时锁定数据库文件)。SQLite读取操作可以是多任务的,但由于无服务器设计,写入只能顺序执行。由于SQLite必须依赖文件系统锁,因此它不是需要密集型写入的部署首选。

2. SQLite的C语言接口

Sqlite3数据库中有表如下:

CREATE TABLE IF NOT EXISTS "COMPANY" (
ID INTEGER PRIMARY KEY,
NAME TEXT NOT NULL,
AGE INTEGER NOT NULL
);INSERT INTO COMPANY (NAME, AGE) VALUES ("Stone", 25);
INSERT INTO COMPANY (NAME, AGE) VALUES ("White", 18);
INSERT INTO COMPANY (NAME, AGE) VALUES ("Ruby", 27);
ID  NAME   AGE
--  -----  ---
1   Stone  25 
2   White  18 
3   Ruby   27 

2.1 打开关闭数据库

数据库连接对象为 sqlite3

  • sqlite3_open_v2() 生成
  • sqlite3_close_v2() 销毁
int sqlite3_open_v2(		/* Open database */const char *filename,   /* Database filename (UTF-8) */sqlite3 **ppDb,         /* OUT: SQLite db handle */int flags,              /* Flags */const char *zVfs        /* Name of VFS module to use */
);

参数:

  1. filename 数据库文件名。
  2. **ppDB 即使发生错误,数据库连接句柄通常也会在 *ppDb 中返回。唯一的例外是,如果无法分配内存来保存 sqlite3* 对象,则 NULL 将被写入 *ppDb 而不是指向 sqlite3 对象的指针。
  3. flags 用于设置打开模式的标识,基础标识有:
    • SQLITE_OPEN_READONLY 数据库以只读模式打开。 如果数据库尚不存在,则返回错误。
    • SQLITE_OPEN_READWRITE 如果可能,数据库将打开以进行读写,或者仅在文件受到操作系统写保护时才进行读取。 无论哪种情况,数据库都必须已经存在,否则会返回错误。
    • SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE 打开数据库进行读写,如果数据库不存在则创建该数据库。这是 sqlite3_open()sqlite3_open16() 始终使用的行为。
  4. zVfs sqlite3_vfs 对象的名称,该对象定义新数据库连接应使用的操作系统接口。如果值为 NULL,则使用默认的 sqlite3_vfs 对象。

函数int sqlite3_db_readonly(sqlite3 *db, const char *zDbName) 可以用来判断数据库是否真正可读写。第一个参数是数据库句柄,第二个参数是数据库连接的名字,主连接为 "main"

如果数据库打开(或创建)成功,则返回 SQLITE_OK。否则返回错误代码。

  • int sqlite3_errmsg(sqlite3 *) 用于失败后获取错误的英语描述。
  • const char *sqlite3_errcode(sqlite3 *) 用于失败后获取错误代号。
int sqlite3_close_v2(sqlite3*)	/* Close database, and destruct the sqlite3 object. */;

2.2 执行SQL语句

sqlite3_exec() 函数是sqlite3_prepare_v2()sqlite3_step()sqlite3_finalize() 的便捷包装器,它允许应用程序运行多个 SQL 语句,而无需使用大量C代码。

int sqlite3_exec(sqlite3* db,                               /* 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 */
);

参数:

  1. sqlite3* db 数据库句柄
  2. const char *sql 要执行的SQL语句。
  3. int (*callback)(void*, int, char**, char**) 回调函数用于执行完SQL语句之后的结果集。如果不使用则设为 NULL
  4. void* 回调函数的第一个参数。
  5. char **errmsg 错误语句。不设为 NULL 并且没有发生错误,则函数 sqlite3_exec() 在返回之前将该参数的指针设置为 NULL

If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() routine returns SQLITE_ABORT without invoking the callback again and without running any subsequent SQL statements.

如果sqlite3_exec() 执行的callback回调函数返回非零,则sqlite3_exec() 例程返回 SQLITE_ABORT,而不会再次调用callback,也不会运行任何后续SQL语句。

执行成功就返回 SQLITE_OK

2.2.1 C语言案例

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>void errorMessage(sqlite3 *db, const char *errMsg);
int callback(void *NotUsed, int argc, char **argv, char **azColName);int main(int argc, char *argv[]) {char *filename = "database.db";     /* Database filename */sqlite3 *db = NULL

相关文章:

【C语言数据库】Sqlite3基础介绍

1. SQLite简介 SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computer…...

el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片

问题 我用el-upload上传图片&#xff0c;再上一篇文章已经解决了&#xff0c;el-upload上传图片给SpringBoot后端,但是又发现了新的问题&#xff0c;果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述&#xff1a;回显图片需要将默认的 file-lis…...

【拓扑空间】示例及详解1

例1 度量空间的任意两球形邻域的交集是若干球形邻域的并集 Proof&#xff1a; 任取空间的两个球形邻域、&#xff0c;令 任取,令 球形领域 例2 规定X的子集族,证明是X上的一个拓扑 Proof&#xff1a; 1. 2., &#xff08;若干个球形邻域的并集都是的元素&#xff0c;元素…...

linux安装jdk8

上传到某个目录&#xff0c;例如&#xff1a;/usr/local/ tar -xvf jdk-8u144-linux-x64.tar.gz配置环境变量&#xff1a; export JAVA_HOME/usr/local/java export PATH$PATH:$JAVA_HOME/bin设置环境变量&#xff1a; source /etc/profile...

Spring重点知识(个人整理笔记)

目录 1. 为什么要使用 spring&#xff1f; 2. 解释一下什么是 Aop&#xff1f; 3. AOP有哪些实现方式&#xff1f; 4. Spring AOP的实现原理 5. JDK动态代理和CGLIB动态代理的区别&#xff1f; 6. 解释一下什么是 ioc&#xff1f; 7. spring 有哪些主要模块&#xff1f;…...

HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习前端基础时&#xff0c;必不可少的就是三大件&#xff08;html、css、javascript &#xff09;&#xff0c;而HTML&#xff08;超文本标记语言——HyperText Markup Language&#xff09;是构成 Web 世界的一砖一瓦&#xff0c;它定义了网页内容的含义和…...

如何借助Idea创建多模块的SpringBoot项目

目录 1.1、前言1.2、开发环境1.3、项目多模块结构1.4、新建父工程1.5、创建子模块1.6、编辑父工程的pom.xml文件 1.1、前言 springmvc项目&#xff0c;一般会把项目分成多个包:controler、service、dao、utl等&#xff0c;但是随着项目的复杂性提高&#xff0c;想复用其他一个模…...

爬虫 新闻网站 并存储到CSV文件 以红网为例 V1.0

爬虫&#xff1a;红网网站&#xff0c; 获取当月指定关键词新闻&#xff0c;并存储到CSV文件 V1.0 目标网站&#xff1a;红网 爬取目的&#xff1a;为了获取某一地区更全面的在红网已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#…...

CentOS 使用 Cronie 实现定时任务

CentOS 使用 Cronie 实现定时任务 文章目录 CentOS 使用 Cronie 实现定时任务一、简介二、基本使用1、常用命令2、使用示例第一步&#xff1a;创建脚本/home/create.sh第二步&#xff1a;添加定时任务第三步&#xff1a;重启 cronie 服务额外&#xff1a;查看 cronie 运行状态定…...

java生成word

两种方案 一、poi-tl生成word <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency> public static void main(String[] args) throws Exception {String…...

C语言中的结构体:揭秘数据的魔法盒

前言 在C语言的广阔天地中&#xff0c;结构体无疑是一颗璀璨的明珠。它就像是一个魔法盒&#xff0c;能够容纳各种不同类型的数据&#xff0c;并按我们的意愿进行组合和排列。那么&#xff0c;这个魔法盒究竟有何神奇之处呢&#xff1f;让我们一探究竟。 一、结构体的诞生&…...

Listener

文章目录 ListenerServletContextListenerServletContextAttributeListenerHttpSessionListenerHttpSessionAttributeListenerServletRequestListenerServletRequestAttributeListenerHttpSessionBindingListenerHttpSessionActivationListener Listener Listener 监听器它是 J…...

单细胞RNA测序(scRNA-seq)SRA数据下载及fastq-dumq数据拆分

单细胞RNA测序&#xff08;scRNA-seq&#xff09;入门可查看以下文章&#xff1a; 单细胞RNA测序&#xff08;scRNA-seq&#xff09;工作流程入门 单细胞RNA测序&#xff08;scRNA-seq&#xff09;细胞分离与扩增 1. NCBI查询scRNA-seq SRA数据 NCBI地址&#xff1a; https…...

金蝶Apusic应用服务器 未授权目录遍历漏洞复现

0x01 产品简介 金蝶Apusic应用服务器(Apusic Application Server,AAS)是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件,全面支持JakartaEE8/9的技术规范,提供满足该规范的Web容器、EJB容器以及WebService容器等,支持Websocket1.1、Servlet4.0、HTTP2.0…...

成都百洲文化传媒有限公司电商服务的新领军者

在当今数字化时代&#xff0c;电商行业正以前所未有的速度蓬勃发展。在这个大背景下&#xff0c;成都百洲文化传媒有限公司凭借其深厚的行业经验和精湛的专业技能&#xff0c;正迅速崛起为电商服务领域的新领军者。 一、专业引领&#xff0c;成就卓越 作为一家专注于电商服务的…...

从无到有开始创建动态顺序表——C语言实现

顺序表的概念 顺序表的底层结构是数组&#xff0c;对数组的封装&#xff0c;实现了常用的增删改查等接口。在物理结构和逻辑结构都是连续的&#xff0c;物理结构是指顺序表在计算机内存的存储方式&#xff0c;逻辑结构是我们思考的形式&#xff0c;顺序表和数组是类似的&#x…...

Unix 网络编程, Socket 以及bind(), listen(), accept(), connect(), read()write()五大函数简介

Unix网络编程是针对类Unix操作系统&#xff08;包括Linux、BSD以及其他遵循POSIX标准的操作系统&#xff09;进行网络通信开发的技术领域。网络编程涉及创建和管理网络连接、交换数据以及处理不同层次网络协议栈上的各种网络事件。在Unix环境中&#xff0c;网络编程通常涉及到以…...

【附下载】2024全行业数字化转型企业建设解决方案PPT合集

精品推荐&#xff0c;2024全行业数字化转型企业建设解决方案PPT合集&#xff0c;精品PPT源格式共21份。 以下是资料目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff1a; 1.制造业数字化转型解决方案及应用.pptx 2.医院数字化网络解决方案.pptx 3.食品饮料工厂数字…...

【QT+QGIS跨平台编译】056:【pdal_lepcc+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_lepcc介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_lepcc介绍 pdal_lepcc 是 PDAL(Point Data Abstraction Library)的一个插件,用于点云数据的压缩。它基于 EPCC(Entwine Point Cloud Compression)算法,提供了对点…...

蓝桥集训之斐波那契数列

蓝桥集训之斐波那契数列 核心思想&#xff1a;矩阵乘法 将原本O(n)的递推算法优化为O(log2n) 构造1x2矩阵f和2x2矩阵a 发现f(n1) f(n) * a 则f(n1) f(1) * an可以用快速幂优化 #include <iostream>#include <cstring>#include <algorithm>using na…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...