Linux下轻量级数据库-SQLite3(嵌入式设备)

article/2025/11/5 4:11:53

一、概念

数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table)。

二、常见的数据库

大型数据库(大型机) —————- Oracle(亿级)
中型数据库(分布式超大型) ———— mysql(百万级)
轻型数据库(嵌入式设备) ———— sqlite(万级)
访问数据库使用SQL语句,适用于所有的数据库。

三、安装SQLite3

有C环境就可以调用sqite

3.1直接用命令安装

sudo apt-get update
sudo apt-get install sqlite3

3.2 直接编译源码

将源码拷贝到Ubuntu的非共享目录解压

 解压命令:

tar zvxf sqlite-autoconf-3380500.tar.gz

配置

cd sqlite-snapshot-201708031550
./configure --prefix=/home/gec/sqlite

编译

make        

安装

make install         

四、SQLite的使用

新建数据库文件
sqlite3 数据库文件的路径   //打开/创建
//比如:sqlite3 first.db
//打开数据库进入命令行

4.1 基本操作命令

.exit/.quit -------- 退出数据库命令行
.help -------------- 帮助说明信息
.tables ------------ 查看当前数据库中所有的表

4.2 数据库访问的SQL语句

基本语法:

所有的SQL语句都以分号(;)结束
不区分大小写

4.3 新建表格

create table 表名(字段名1 字段类型1,字段名2 字段类型2,字段名3 字段类型3,...);
比如:
//创建一个stutbl的表,表中有3个字段
//分别是整数类型的学号id,字符串类型的name和整数类型的age
create table zhiguoxin(id int,name char[20],age int);
//不存在则创建
create table if not exists zhiguoxin(id int,name char[20],age int);
//如果希望表中某个字段的内容不重复,可以用unique修饰该字段
create table if not exists zhiguoxin(id int unique,name char[20],age int);

4.4 删除表格

drop table 表名;
//drop table zhiguoxin;

4.5 往表格中插入数据

insert into 表名 values(字段值1,字段值2,字段值3,....);
//字段值如果是字符串,必须用''(单引号)括起来
比如:
insert into zhiguoxin values(1001,'刘尧',18);
insert into zhiguoxin values(1002,'聂衍文',19);
insert into zhiguoxin values(1003,'杨佳晨',20);
insert into zhiguoxin values(1004,'冯华阳',21);

完成插入之后,zhiguoxin 的表格内容如下:

idnameage
1001刘尧18
1002聂衍文19
1003杨佳晨20
1004冯华阳21

4.6 查询表中的数据

//查询表中的所有数据

select * from 表名;
//select * from zhiguoxin;

4.7 查看数据库

可以把first.db数据库文件拷贝至windows下,使用SQLite Developer打开即可看到。
SQLite Developer下载地址

https://mydown.yesky.com/pcsoft/443425.html

4.8 按条件查找

1.使用where指定查询条件

select * from zhiguoxin where id=1003;//查询id值为1003的条目
select * from zhiguoxin where age>=19 and age<21;
select * from zhiguoxin where age>=19 or age<21;

2.指定查询的字段

select id,name,age from zhiguoxin;//只查询id,name,age的字段 

3.使用where+like实现模糊查询

select * from zhiguoxin where name like '刘%';//查找名字以刘开头的条目

4.使用order by实现查询结果按某个字段的值升序/降序输出

select * from zhiguoxin order by age desc;//按年龄降序排序     
select * from zhiguoxin order by id asc;  //按id升序排序   

4.9 删除表中的条目

delete from 表名 where 条件;//删除所有符合条件的条目
比如:
delete from zhiguoxin where id=1001;

4.10 更新(修改)表中的条目

update 表名 set 字段名1=字段值1,字段名2=字段值2... where 条件;//修改符合条件的条目
比如:
update zhiguoxin set age=100 where id=1002;

4.11 SQLite中字段类型

数字:

int ------- 整型
smallint ---- 短整型
tinyint ----- 微型整数(0~255)
bit --------- 0 or 1
float ------ 单精度浮点型
real ------- 双精度浮点型

字符串:

char ---------- 非unicode定长字符串 < 8000
varchar ------- 非unicode变长字符串 < 8000
text ---------- 非unicode变长字符串 < 2^32-1nchar ---------- unicode定长字符串 < 8000
nvarchar ------- unicode变长字符串 < 8000
ntext ---------- unicode变长字符串 < 2^32-1

五、SQLite的C语言访问接口

sqlite本身自带C语言访问接口,在C语言的环境下可以直接使用,使用这些接口的代码需要 sqlite的源码编译进可执行程序 或者 编译时链接sqlite的库。

5.1 打开 sqlite3_open

int sqlite3_open(const char *filename,   /* 数据库的文件路径 */sqlite3 **ppDb          /* 输出参数:传出代表打开数据库的句柄 */
);
//成功返回SQLITE_OK,否则打开失败char ---------- 非unicode定长字符串 < 8000
varchar ------- 非unicode变长字符串 < 8000
text ---------- 非unicode变长字符串 < 2^32-1nchar ---------- unicode定长字符串 < 8000
nvarchar ------- unicode变长字符串 < 8000
ntext ---------- unicode变长字符串 < 2^32-1

5.2 关闭 sqlite3_close

int sqlite3_close(sqlite3 *pDb);
//传入要关闭的数据库的句柄

5.3 编译方法(必须链接pthread库和dl库)

1.直接编译源码gcc sqlite3.c sqlite_test.c -pthread -ldl -o sqlite_test
2.链接sqlite3的动态库gcc sqlite_test.c -pthread -ldl -lsqlite3 -L /home/gec/sqlite/lib -o sqlite_test  //如果运行时找不到sqlite3的库,可以将编译出来的库文件拷贝到/usr/lib目录下(cp -r)      

5.4 执行SQL语句的接口 sqlite3_exec

int sqlite3_exec(sqlite3 *pDb,                              /* 打开的数据库的句柄 */const char *sql,                           /* 要执行的SQL语句 */int (*callback)(void *arg,int col,char **str,char **name),  /* 回调函数,处理SQL语句执行返回的结果(查询),一条结果调用一次 arg - exec的第四个参数col - 本条结果的字段数str - 记录字段值的数组name - 记录字段名的数组回调函数必须返回SQLITE_OK */void *arg,                                 /* 传递给回调函数的第一个参数 */char **errmsg                              /* 错误信息 */
);
//成功返回SQLITE_OK,否则执行失败

几个例子

//连接数据库
int Connection_Sqlite3DataBase()
{rc = sqlite3_open("./face_database/face.db", &db);if (rc != SQLITE_OK){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));sqlite3_close(db);exit(1);}elseprintf("You have opened a sqlite3 database named bind.db successfully!\nCongratulation! Have fun!\n");return 0;
}
//将图片插入到数据库
void insert_face_data_toDataBase(const char *name, MByte *face_feature, MInt32 featureSize)
{sqlite3_prepare(db, "insert into face_data_table(name,face_feature,feature_size) values (?,?,?);", -1, &stmt, NULL);sqlite3_bind_text(stmt, 1, name, strlen(name), NULL);sqlite3_bind_blob(stmt, 2, face_feature, featureSize, NULL);sqlite3_bind_int(stmt, 3, featureSize);sqlite3_step(stmt);
}


http://chatgpt.dhexx.cn/article/5UP4Ni9W.shtml

相关文章

二、MySQL

MySQL是一个小型关系数据库管理系统。与其他大型数据库管理系统 &#xff08;例如Oracle、DB2、SQL Server 等&#xff09;相比&#xff0c;MySQL规模小、功能有限&#xff0c;但是它体积小、速度快、成本低&#xff0c;并且提供的功能对稍微复杂的应用来说已经够用&#xff0c…

数据库——多种方法导入Excel数据

文章目录 一、SQL Server导入Excel数据二、小技巧导入Excel数据三、使用Microsoft.ACE.OLEDB导入Excel数据四、手动添加一行数据五、手动添加多行数据五、解决类型不匹配致导入失败 一、SQL Server导入Excel数据 接下来就一直点击NEXT&#xff0c;直到完成 此时EXCEL的数据就被…

MySQL数据库简介

MySQL数据库简介 MySQL数据库是一种关系型数据库管理系统&#xff0c;是一种开源软件由瑞典MySQL AB公司开发&#xff0c;08年1月16日被Sun公司收购&#xff0c;09年Sun公司又被Oracle公司收购。 由于其体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&a…

Linux中的小型数据库 SQLite3

数据库&#xff08;SQLite&#xff09; 数据库后缀 .db&#xff08;data base) gcc时加 -lsqlite3 这些是小希归纳的SQLite的一些重要语句&#xff0c;与示例应用 如果想要进一步学习&#xff0c;大家可以去网上搜 SQLite3的书籍

在JSTL 中使用小型数据库 SQLite

文章目录 一、Sqlite 数据库命令行工具的下载下载地址&#xff1a; 二、Sqlite 数据库 shell 工具的使用方法1.创建数据库2.Sqlite 数据库中表的创建&#xff1a;3.表中数据的插入4.Sqlite 数据库命令行的退出 三、ER图转化为数据库3.1建表3.2 向表中插入数据3.3 输出数据库中相…

实现一个小型数据库--记一次中级软件设计实作浮沉历程

说在前头&#xff1a;本篇文章主要是记录这次项目的过程&#xff0c;不全是贴代码&#xff0c;具体的程序移步这里&#xff0c;不喜欢的同学请轻喷。 事件起因&#xff1a;大三狗一枚&#xff0c;专业是软件应用。这学期的中级软件设计实作题目是实现一个小型的数据库&#xf…

用xml充当小型数据库案例

利用dom4j工具&#xff0c;将user.xml作为一个小型的数据库&#xff0c;然后控制台输入进行用户名与密码的匹配 /*user.xml文件放在src下*/ <?xml version"1.0" encoding"utf-8"?> <users><user id"001" name"ecri" …

数据库上机3(小型数据库应用程序开发)

注&#xff1a; ①各上机报告均根据《数据库技术与应用》课程的上机任务所做。 ②课程教材为 《数据库系统概论&#xff08;第五版&#xff09;》/王珊, 萨师煊编著/北京:高等教育出版社,2014 上机要求&#xff1a; 1、自学上层应用访问数据库的方式&#xff08;如ODBC、ADO、…

【SQL数据库设计】数据库设计【小型数据库】

数据库设计 需求 表结构字段类型、是否允许为null、是否有默认值索引设计数据库引擎的选择 根据产品原型分析&#xff0c;词性分析法&#xff0c;名词创建表或字段&#xff0c;动词表示关系。 数据存储&#xff1a;长期存储的数据&#xff0c; 1.主键&#xff1a;唯一、自增。 …

小型数据库系统开发作业

文章目录 题目数据库设计UI界面开发展示 原文链接&#xff1a;https://zhanghan.xyz/posts/60088/ 题目 自学上层应用访问数据库的方式&#xff08;如ODBC、ADO、JDBC、MySQLi或者其它&#xff09;&#xff0c;根据您使用的上层语言&#xff08;不限语言&#xff08;但要求与自…

关于Freesurfer提取annotation分区结构特征的命令mri_segstats

Freesurfer提供了基于分区模板提取常规特征&#xff08;area, volume, thickness, thicknessstd, meancurv, gauscurv, foldind, curvind&#xff09;的指令mris_anatomical_statsaparcstats2table还有可以提取从fMRI或DWI产生的结果以及一些特殊的结构特征&#xff08;如LGI&a…

Linux下使用Freesurfer的两种方法

文章目录 1. 直接在终端使用准备工作开始运行 2. 通过调用python文件使用 1. 直接在终端使用 重点&#xff1a;Freesurfer安装完成后&#xff0c;需要在相同的用户名下运行&#xff0c;并且所有文件数据也要放在此用户下 放在其他地方可能会因为没有权限而运行失败 官网流程说…

freesurfer入门-试图理解freesurfer输出的数据

因为一些原因想要学习使用freesurfer,虽然照着tutorial跑了起来但是完全不知道跑出来的是个啥,所以准备弄一篇文章记录每个部分是干啥的,此文为记录 能记多少是多少吧… FreeSurfer内数据 labelmriorgtransforms scriptsstatssurf 首先要提一下比较常见的两个词:lh和rh 如果我没…

FreeSurfer入门(1) Output Data

目录 前言一、使用freeview查看卷二、使用freeview查看3D surfacePial surfacewhite surfaceInflated SurfaceThickness MapCortical Parcellation 前言 因一些原因需要学习FreeSurfer,然而教程比较少有些难懂,看了一段时间觉得可能要钻钻牛角尖才可以完成学习,所以开始记笔记…

IXI数据预处理 + Linux + freesurfer

目录 1. freesurfer下载安装测试1.1 下载受阻&#xff0c;安装axel-2.4,多线程下载1.2 安装1.3 安装时出现的问题1.4 测试1.5 使用前注意 2. freesurfer 处理IXI2.1 freesurfer 的使用2.2 从零开始处理IXI2.2.1 命令行skull_stripping 单个.nii文件2.2.2 分析处理完成后的文件2…

Freesurfer的简单使用和一些基础知识

Freesurfer Freesurfer是用于MRI图像处理和分析的一款开源软件&#xff0c;可进行多种模态数据的预处理&#xff0c;皮层重建&#xff0c;volume与surface的互相之间的配准等。 MRI成像 https://www.csdn.net/tags/Mtzagg1sNzM3MTMtYmxvZwO0O0OO0O0O.html MRI成像原理&…

FreeSurfer汉化教程

介绍FsFAST的预处理 根据官网的英文进行翻译&#xff0c;并在使用过程中所犯的错误进行解决的过程 介绍Tutorial Data 下载以及安装 安装 安装Tutorial Datasets 从教程数据&#xff0c;创建文件tutorial_data在自己的工作路径中。 curl https://surfer.nmr.mgh.harvard.e…

Freesurfer教程(ubuntu)

Freesurfer教程&#xff08;ubuntu&#xff09; 参考链接&#xff1a;http://www.wjhsh.net/zhhfan-p-13405572.html 1.安装 freesurfer的安装教程各个网站上都用详细的过程&#xff0c;这里不再叙述 这个命令是在处理tutorial_data中的dcm数据时使用的&#xff1a;recon-al…

freeSurfer颅骨剥离

命令参考 https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all recon-all -i 输入文件路径.nii -s 创建用于保存文件夹名称 -sd 保存文件夹所在的目录 -命令 -autorecon2-cp 输入输出参考 https://surfer.nmr.mgh.harvard.edu/fswiki/ReconAllDevTable orig/001.mgz 将…

freesurfer使用

一.做灰白质分割 我的目的是得到某被试的脑白质mask。 1.首先找了freesurfer教程&#xff0c;直接打开了freeview&#xff1b; 2.可视界面中没有直接的wmseg功能&#xff1b; 3.去使用freeview的手册查询wmseg&#xff08;开始怀疑这种操作不叫该名词..&#xff09;&#x…