Sqlite3

SQLite3是一种轻量级的关系型数据库管理系统(RDBMS),它以跨平台、零配置、服务器-less的方式存储数据。

SQLite3不像其他常见的数据库管理系统,如MySQL或PostgreSQL那样需要一个独立的服务器进程,在应用程序内部直接操作文件来进行数据存储和读取。

SQLite3非常适合于嵌入式设备和单机应用程序等场景,因为它不需要占用太多资源,也允许在不同的平台上运行。 此外,SQLite3支持大多数SQL语法,并且还提供了一些高级功能,如触发器、存储过程等。

SQLite3的特性和优势:

跨平台性:SQLite3可以在多种操作系统和编程语言下使用,包括Windows、Linux、macOS、iOS、Android等。

零配置:SQLite3的特点之一是不要求任何服务器或网络配置。只需将数据库文件嵌入应用程序即可轻松地访问数据。

体积小:SQLite3的核心库非常小,通常只有几百KB,因此非常适合在资源受限或空间受限的系统中使用。

支持SQL:SQLite3支持大多数标准SQL查询语言,使用户能够使用大多数传统数据库管理任务。 ACID兼容:SQLite3支持ACID(原子性、一致性、隔离性和持久性)事务处理,确保数据始终处于一致状态。

高可靠性:SQLite3对于频繁读取和少量更新的场景,表现出色。由于其自动记录更改,以防止损坏和数据丢失。

强大的API:SQLite3提供了一个简单易用的C语言API来操作数据库,同时也提供了大量的接口和工具。

可扩展性:SQLite3允许用户创建自己的函数和存储过程,从而增加了其灵活性和可扩展性。

安装sqlite3

sudo apt-get update

sudo apt-get install sqlite3

安装sqlite3依赖库

sudo apt-get install libsqlite3-dev

sqlite3中以'.'开头的相关命令:

命令 说明
.archive ... 管理SQL归档文件
.auth ON|OFF 显示授权回调函数
.backup ?DB? FILE 将数据库DB(默认为"main")备份到FILE
.bail on|off 在错误发生后停止。默认为OFF
.binary on|off 打开或关闭二进制输出。默认为OFF
.cd DIRECTORY 将工作目录更改为DIRECTORY
.changes on|off 显示SQL更改的行数
.check GLOB 如果自从.testcase以来的输出不匹配,则失败
.clone NEWDB 从现有数据库克隆数据到NEWDB中
.databases 列出附加数据库的名称和文件
.dbconfig ?op? ?val? 列出或更改sqlite3_db_config()选项
.dbinfo ?DB? 显示有关数据库的状态信息
.dump ?TABLE? ... 将所有数据库内容呈现为SQL
.echo on|off 打开或关闭命令回显
.eqp on|off|full|... 启用或禁用自动EXPLAIN QUERY PLAN
.excel 在电子表格中显示下一个命令的输出
.exit ?CODE? 以返回代码CODE退出此程序
.expert 实验性功能。为查询建议索引
.explain ?on|off|auto? 更改EXPLAIN格式模式。默认值:auto
.filectrl CMD ... 运行各种sqlite3_file_control()操作
.fullschema ?--indent? 显示模式和sqlite_stat表的内容
.headers on|off 打开或关闭标题的显示
.help ?-all? ?PATTERN? 显示有关PATTERN的帮助文本
.import FILE TABLE 将数据从FILE导入TABLE
.imposter INDEX TABLE 在索引INDEX上创建仿冒表TABLE
.indexes ?TABLE? 显示索引的名称
.limit ?LIMIT? ?VAL? 显示或更改SQLITE_LIMIT的值
.lint OPTIONS 报告潜在的模式问题。
.load FILE ?ENTRY? 加载扩展库
.log FILE|off 打开或关闭日志记录。文件可以是stderr/stdout
.mode MODE ?TABLE? 设置输出模式
.nullvalue STRING 在NULL值的位置使用字符串STRING
.once (-e|-x|FILE) 仅将下一个SQL命令的输出发送到FILE
.open ?OPTIONS? ?FILE? 关闭现有数据库并重新打开FILE
.output ?FILE? 将输出发送到FILE,如果省略FILE,则发送到stdout
.parameter CMD ... 管理SQL参数绑定
.print STRING... 打印文本字符串STRING
.progress N 在每个N操作码后调用进度处理程序
.prompt MAIN CONTINUE 替换标准提示符
.quit 退出此程序
.read FILE 从FILE读取输入
.recover 尝试从损坏的数据库中恢复尽可能多的数据。
.restore ?DB? FILE 从FILE还原数据库DB(默认为"main")的内容
.save FILE 将内存中的数据库写入FILE
.scanstats on|off 打开或关闭sqlite3_stmt_scanstatus()指标
.schema ?PATTERN? 显示与PATTERN匹配的CREATE语句
.selftest ?OPTIONS? 运行在SELFTEST表中定义的测试
.separator COL ?ROW? 更改列和行分隔符
.session ?NAME? CMD ... 创建或控制会话
.sha3sum ... 计算数据库内容的SHA3哈希值
.shell CMD ARGS... 在系统Shell中运行CMD ARGS...
.show 显示各种设置的当前值
.stats ?on|off? 显示统计信息或打开/关闭统计信息
.system CMD ARGS... 在系统Shell中运行CMD ARGS...
.tables ?TABLE? 列出LIKE模式为TABLE的表名
.testcase NAME 开始将输出重定向到"testcase-out.txt"
.testctrl CMD ... 运行各种sqlite3_test_control()操作
.timeout MS 尝试以MS毫秒为间隔打开已锁定表
.timer on|off 打开或关闭SQL计时器
.trace ?OPTIONS? 在每个SQL语句执行时输出
.vfsinfo ?AUX? 有关顶级VFS的信息
.vfslist 列出所有可用的VFS
.vfsname ?AUX? 打印VFS堆栈的名称
.width NUM1 NUM2 ... 设置" column"模式的列宽度

创建表格

CREATE TABLE table_name (

column_1 data_type constraints,

column_2 data_type constraints,

...,

column_n data_type constraints

);

删除表格

DROP TABLE table_name;

查询数据

SELECT column_1, column_2, ..., column_n

FROM table_name;

插入数据

INSERT INTO table_name (column_1, column_2, ..., column_n)

VALUES (value_1, value_2, ..., value_n);

更新数据

UPDATE table_name

SET column_1 = value_1, column_2 = value_2, ..., column_n = value_n

WHERE condition;

删除数据

DELETE FROM table_name WHERE condition;

打开一个 SQLite 数据库文件:

int sqlite3_open(

const char *filename, /* 数据库文件的文件名,如果为 ":memory:" 则表示创建内存中数据库 */

sqlite3 **ppDb /* 返回指向数据库连接句柄的指针 */

);

关闭指定数据库连接:

int sqlite3_close(sqlite3*);

在 SQLite 数据库连接上执行一条或多条 SQL 语句,并调用一个回调函数处理执行结果:

int sqlite3_exec(

sqlite3*, /* 执行 SQL 命令的数据库连接 */

const char *sql, /* 待执行的 SQL 命令 */

int (*callback)(void*,int,char**,char**), /* 在执行命令时的回调函数 */

void *, /* 作为第一个参数传递给回调函数的指针 */

char **errmsg /* 用于存储错误消息的指针 */

);

int (*callback)(void*, int, char**, char**);

第一个参数 void*,是使用者传递给 sqlite3_exec() 调用的 void* 参数。

第二个参数 int,是查询结果所返回的列数。

第三个参数 char**,是包含每个结果集元素值的字符串数组。

第四个参数 char**,是包含每个结果集元素的列名称的字符串数组。这通常会在 SELECT 语句中返回。

相关推荐
tryCbest1 个月前
SQLite查看数据库
sqlite·sqlite3
Janspran1 个月前
监控系统4 - LVGL | sqlite3 | mqtt
linux·sqlite3·嵌入式实时数据库
奔跑吧邓邓子1 个月前
【C++实战(64)】C++ 邂逅SQLite3:数据库编程实战之旅
数据库·c++·sqlite·实战·sqlite3·数据库编程
fangeqin1 个月前
解决django.db.utils.OperationalError: attempt to write a readonly database错误
django·apache·sqlite3·selinux
SELSL2 个月前
SQLite3的API调用实战例子
linux·数据库·c++·sqlite3·sqlite实战
时间之里3 个月前
c++:MFC中sqlite3的使用(附实际案例)
c++·mfc·sqlite3
绿箭柠檬茶3 个月前
Ubuntu 下编译 SQLCipher 4.8.0
linux·运维·ubuntu·sqlite3
jjkkzzzz6 个月前
SQLite3介绍与常用语句汇总
数据库·sqlite3
三贝勒文子6 个月前
[ 问题解决 ] sqlite3.ProgrammingError: SQLite objects created in a thread can ...
数据库·python·sqlite3