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
相关推荐
2601_9657984714 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php
zdl68614 小时前
EasyMarkets:“机器人商业化仍待验证”
数据库·机器人
Freak嵌入式14 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
Elastic 中国社区官方博客14 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
云和恩墨15 小时前
数据库一体机zData X 3.6.0以“性能、成本、韧性、生态”强化数据库基础设施价值主张
数据库
灯澜忆梦15 小时前
【MySQL7】多表查询
数据库·sql
Qlittleboy15 小时前
tp5网站链接不上slqserver,计算机积极拒绝了链接
数据库·sql
行业研究员16 小时前
腾讯云数据库:团队知识统一检索实践
数据库·云计算·腾讯云·腾讯云数据库·团队知识
thinking_talk16 小时前
腾讯云数据库AgentMemory团队知识管理实践
数据库·人工智能·腾讯云·腾讯云数据库·agent memory·团队知识管理
朱容zr33313316 小时前
什么是覆盖索引?它的优点是什么?
数据库