Linux系统编程——sqlite数据库

数据存储

|--------------|------|------------------|
| 类型 | 存储位置 | 掉电或者程序运行结束后的数据后果 |
| 变量、数组等数据存储结构 | 内存 | 丢失 |
| 文件 | 硬盘 | 不丢失 |
| 数据库 | 硬盘 | 不丢失 |

与文件相比,数据库是一种专业的存储数据的结构,其中包含一系列算法用来查找等操作,所以一般来说少量数据用文件存储,大量数据用数据库存储

常用的数据库

1.关系型数据库:(例如Excel)

将复杂的数据结构简化为二维表格形式

大型:Oracle、DB2

中型:MySql、SQLServer

小型:Sqlite

2.非关系型数据库

以键值对存储,且结构不固定,相对来说使用起来比较复杂

//JSON

Redis

MongoDB

sqlite数据库

优势:

1.开源免费, 用c语言开发

2.代码量少,1万行左右,总大小10M以内

3.文件型数据库,可以移动,跨平台移植性好

4.理论数据容量最大2T

安装sqlite3数据库

命令:sudo apt-get install sqlite3

安装相关库:sudo apt-get install libsqlite3-dev

测试是否安装完成密令:sqlite3 xxx.db,创建一个名为xxx的数据库,成功则如下

sqlite3相关的命令

1,.help:查看支持的命令

2, .tables:查看当前数据库中的表

3,.headers on|off:显示或隐藏表头

4,.mode column:设置左对齐

5,.quit:退出

https://www.runoob.com/sqlite/sqlite-tutorial.html

sqlite支持的数据类型

存储类型

NULL:空值

INTEGER:整型

REAL:浮点型

TEXT:字符串类型

BLOB:根据输入进行储存,相当于void*

注:不区分大小写

亲和类型

sqlite3提供的SQL语句

创建表

create table 表名(列名1 类型, 列名2 数据类型...);

注意:SQL语句后面必须要有分号,以点.开头的语句不需要分号

出现第一种情况是因为后面没有打分号,补上分号即可

添加数据

insert into 表名 values(值1, 值2, 值3...);

注:方括号可以省略

查询数据

1,查询所有列数据:select * from 表名;

2,查询指定列数据:select 列名1, 列名2...列名n from 表名;

3,查询满足条件的数据:select * from 表名 where 列名 条件...;

适用的关系运算符:>,<,>=,<=,=,!=

多个条件:

且:and

或:or

4,模糊查找(只适合字符串):

select * from 表名 where 列 like "%详细信息"

select * from 表名 where 列 like "_详细信息"

%:可以匹配多个字符

_:只能匹配一个字符,一个下划线相当于一个字符

排序

升序||降序:select * from 表名 order by 列名 ASC||DESC

删除数据

delete from 表名 where 删除的条件;

修改数据

update 表名 set 列=新值 where 条件;

删除表

drop table 表名

设置主键值自动增长列

创建表时,在列名后添加PRIMARY KEY AUTOINCREMENT(可以按Tab自动补齐)

插入数据时,主键值自动增长列给NULL,使其自动增长

注意:只能是INTEGER类型,亲和类型都不行

时间相关

date("now"); 年-月-日

datetime("now") 年-月-日 时:分:秒

注:东八区时区时差八个小时,所以可以如下加入修饰符

安装sqlite可视化工具

命令:sudo apt-get install sqlitebrowser

sqlite3提供的C/C++ API接口

https://www.sqlite.org/

sqlite3_open

功能:打开一个数据库文件

参数:

filename:需要打开的数据库名称

ppDb:保存数据库句柄的指针的地址

返回值:

成功:SQLITE_OK

失败:错误码

sqlite3_errmsg()

功能:返回错误信息字符串

sqlite3_close

功能:关闭数据库

sqllite3_exec()

功能:执行SQL语句

参数:

第一个:数据库句柄

sql:要执行的sql语句

callback:回调函数,执行select语句时使用

函数功能:执行select语句时调用的回调函数

参数:

1:sqlite3_exec传递的第四个参数

2:查询到的数据的列数

3:指针数组,多个指针分别指向每一列数据的字符串

4:指针数组,指向每一列的列名

arg:给callback传递的实参

errmsg:用来保存出错信息

返回值:

成功:SQLITE_OK

失败:错误码

出现这种情况是因为没有连接数据库

数据库不能重复创建,如果重名则会出现以下情况


注意:

1,如果出现以下情况,则是**回调函数没有写返回值,**回调函数如果没有给返回值,则会返回随机值,但是callback函数要求成功必须返回0,系统要使用

2,从数据库查询出来的数据,统统是字符串类型

3,从数据库中查询数据,查到几条,回调函数就会被执行几次

提高sqlite数据插入效率------开启事务机制

所谓 "事务" 就是指一组 SQL 命令,这些命令要么一起执行,要么都不被执行。在 SQLite中,每调用一次 sqlite3_exec () 函数,就会隐式地开启了一个事务,如果插入一条数据,就调用该函数一次,事务就会被反复地开启、关闭,会增大 IO 量。如果在插入数据前显式开启事务,插入后再一起提交,则会大大提高 IO 效率,进而加快数据插入速度。

步骤

1,BEGIN,显式开启事务,后续操作进入 "待提交" 状态

2,执行SQL操作,所有操作暂存于内存,未真正写入磁盘

3,COMMIT,提交事务,将所有操作一次性写入磁盘,事务结束

测量时间

功能:获取当前时间(可以精确到微秒)

参数:

tv:当前的具体时间

在程序运行前和运行完毕后分别调用该函数,最后进行相减,便可得出运行时间

相关推荐
AC赳赳老秦2 小时前
DeepSeek 辅助科研项目申报:可行性报告与经费预算框架的智能化撰写指南
数据库·人工智能·科技·mongodb·ui·rabbitmq·deepseek
mahailiang2 小时前
codeblocks+wxWidgets Projects中引用第三方库(sqlite3)
数据库·sqlite·wxwidgets·codeblocks
cyforkk2 小时前
09、Java 基础硬核复习:异常处理(容错机制)的核心逻辑与面试考点
java·数据库·面试
CC.GG2 小时前
【Linux】进程控制(二)----进程程序替换、编写自主Shell命令行解释器(简易版)
linux·服务器·数据库
2301_765703142 小时前
开发一个简单的Python计算器
jvm·数据库·python
QCzblack3 小时前
第三周作业
数据库
Root_Hacker3 小时前
sql注入学习笔记
数据库·sql·web安全·网络安全·oracle·网络攻击模型
IT邦德3 小时前
基于OEL8环境的图形化部署Oracle26ai
数据库·oracle