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
相关推荐
迷枫71224 分钟前
DM8 目录结构与常用排查入口梳理
服务器·数据库
Mr.Daozhi1 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_802 小时前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体
大鹏说大话2 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
夏贰四2 小时前
数据建模工具如何筑牢数据根基?数据建模工具怎样落实标准体系?
数据库·数学建模·数据建模工具
程序猿阿伟3 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
二等饼干~za8986684 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
G_dou_4 小时前
Linux 搭建 Rust 开发环境:从 rustup 安装到 Cargo 镜像
linux·rust
数据库小学妹4 小时前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan1234 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体