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
相关推荐
小二·3 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手4 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌4 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
蓝天下的守望者4 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
明理的信封4 小时前
AI 基础设施的“去 Python 化“:Rust 与 C# 的两条替代路径
人工智能·python·rust
上海云盾-小余4 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹5 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
AllData公司负责人6 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2603_954708316 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全