Rust 操作Sqlite数据库详细教程
- 一、Sqlite数据库介绍
- [二、Rust 操作Sqlite数据库详细教程](#二、Rust 操作Sqlite数据库详细教程)
一、Sqlite数据库介绍
SQLite 是一款轻量级、嵌入式的关系型数据库管理系统,具有以下核心特性:
1、无服务器架构
- 无需独立服务进程,数据库直接存储在单一文件中(如
.db或.sqlite扩展名)。 - 应用程序通过函数库直接读写文件,简化部署流程。
2、零配置与跨平台
- 无需安装或管理配置,开箱即用。
- 支持所有主流操作系统(Windows/Linux/macOS)及移动端(Android/iOS)。
3、事务支持与 ACID 兼容
- 完全满足 ACID(原子性、一致性、隔离性、持久性)特性。
- 通过回滚日志实现事务安全:
{ 写入前备份数据 故障时恢复至备份点 \begin{cases} \text{写入前备份数据} \\ \text{故障时恢复至备份点} \end{cases} {写入前备份数据故障时恢复至备份点
4、应用场景
| 场景 | 优势 |
|---|---|
| 嵌入式设备 | 低内存占用(约 250KB) |
| 移动应用 | 无需网络连接 |
| 小型网站/本地工具 | 快速读写响应 |
5、性能与局限性
- 优势 :
- 高并发读操作(支持多线程同时读取)。
- 低延迟(数据访问直接操作文件)。
- 限制 :
- 写入并发性较低(全库锁机制)。
- 单文件最大支持约 140TB,但推荐用于中小型数据集。
6、适用技术栈
- 语言支持:C/C++/Python/Java/JavaScript 等。
- 开发工具:DB Browser for SQLite(图形化管理)。
总结 :SQLite 是轻量级本地数据库的首选,适用于独立应用、IoT 设备和原型开发。其设计哲学可概括为:
简单性 ≫ 扩展性 \text{简单性} \gg \text{扩展性} 简单性≫扩展性
二、Rust 操作Sqlite数据库详细教程
1、添加依赖库
使用cargo add sqlite命令添加依赖,如下图

2、编写测试代码
rust
fn main(){
//创建表
let connection = sqlite::open("test.db").unwrap();
let query = "
CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER);";
connection.execute(query).unwrap();
//增
let query = "
INSERT INTO users VALUES ('Xp1', 42);
INSERT INTO users VALUES ('Xp2', 69);";
connection.execute(query).unwrap();
//查
let query = "SELECT * FROM users";
connection.iterate(query, |pairs| {
for &(name, value) in pairs.iter() {
println!("{} = {}", name, value.unwrap());
}
true
})
.unwrap();
println!("-------------------");
let query = "SELECT * FROM users WHERE age > ?";
for row in connection
.prepare(query)
.unwrap()
.into_iter()
.bind((1, 50))
.unwrap()
.map(|row| row.unwrap())
{
println!("name = {}", row.read::<&str, _>("name"));
println!("age = {}", row.read::<i64, _>("age"));
}
}
3、运行结果
rust
C:/Users/徐鹏/.cargo/bin/cargo.exe run --color=always --package tttRust --bin tttRust --profile dev
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
Running `target\debug\tttRust.exe`
name = Alice
age = 42
name = Bob
age = 69
name = Alice
age = 42
name = Bob
age = 69
name = Xp1
age = 42
name = Xp2
age = 69
name = Xp1
age = 42
name = Xp2
age = 69
name = Xp1
age = 42
name = Xp2
age = 69
-------------------
name = Bob
age = 69
name = Bob
age = 69
name = Xp2
age = 69
name = Xp2
age = 69
name = Xp2
age = 69
进程已结束,退出代码为 0

