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
相关推荐
百锦再2 小时前
第1章 Rust语言概述
java·开发语言·人工智能·python·rust·go·1024程序员节
IvorySQL2 小时前
你真的知道你正在运行哪个 PostgreSQL吗?
数据库·postgresql
l1t3 小时前
利用DeepSeek采用hugeint转字符串函数完善luadbi-duckdb的decimal处理
数据库·lua·c·duckdb·deepseek
无敌最俊朗@3 小时前
Qt 开发终极坑点手册图表版本
数据库
yumgpkpm3 小时前
Doris 并入CMP7(类Cloudera CDP 7.3.1 404华为鲲鹏ARM版)的方案和实施源代码
大数据·oracle·sqlite·sqoop·milvus·cloudera
小虚竹4 小时前
Rust日志系统完全指南:从log门面库到env_logger实战
开发语言·后端·rust
星释4 小时前
Rust 练习册 8:链表实现与所有权管理
开发语言·链表·rust
今日说"法"4 小时前
Rust 日志级别与结构化日志:从调试到生产的日志策略
开发语言·后端·rust
-大头.4 小时前
Rust并发编程实战技巧
开发语言·后端·rust