Rust 语言使用 SQLite 数据库

一、概述

SQLite 是一种广泛使用的轻量级数据库,它通过简单的文件来承载数据,无需复杂的服务器配置。正因如此,它成为了许多桌面和移动应用的首选数据库。在 Rust 生态中,rusqlite 库为开发者提供了操作 SQLite 数据库的简洁且有效的方法。本文将全面介绍如何利用 rusqlite 在 Rust 中进行数据库操作。

二、安装

在开始之前,我们需要将 rusqlite 引入到你的 Rust 项目中。首先,在项目的 Cargo.toml 文件下的 dependencies 部分添加 rusqlite:

bash 复制代码
[dependencies]
rusqlite = "0.25.3"

完成添加后,执行 cargo build 来下载和编译 rusqlite 库及其依赖。

三、打开和创建数据库

要操作一个 SQLite 数据库,首先需要创建一个连接。rusqlite 提供了 Connection 对象来实现这一点。以下示例展示如何打开一个存在的数据库文件或创建一个新的数据库文件:

rust 复制代码
use rusqlite::{Connection, Result};

fn main() -> Result<()> {
    let conn = Connection::open("my_database.db")?;

    // 接下来,你可以使用 `conn` 来进行数据库操作
    // ...

    Ok(())
}

四、创建表

有了 Connection 对象,我们就可以开始创建数据表:

rust 复制代码
use rusqlite::{params, Connection, Result};

fn main() -> Result<()> {
    let conn = Connection::open("my_database.db")?;

    conn.execute(
        "CREATE TABLE if not exists person (
            id INTEGER PRIMARY KEY,
            name TEXT NOT NULL,
            age INTEGER
         )",
        params![],
    )?;

    Ok(())
}

在上述代码中,我们创建了一个简单的 person 表,包含 id、name 和 age 三个字段。

五、插入数据

插入数据是数据库操作的基础。在 rusqlite 中,插入数据可以通过 execute 方法实现:

rust 复制代码
fn main() -> Result<()> {
    let conn = Connection::open("my_database.db")?;

    conn.execute(
        "INSERT INTO person (name, age) VALUES (?1, ?2)",
        params!["Alice", 32],
    )?;
    
    Ok(())
}

六、查询数据

查询数据可以通过 query_map 方法来进行,它允许我们映射查询结果到 Rust 的结构体中:

rust 复制代码
use rusqlite::{params, Connection, Result, NO_PARAMS};

#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    age: i32,
}

fn main() -> Result<()> {
    let conn = Connection::open("my_database.db")?;

    let mut stmt = conn.prepare("SELECT id, name, age FROM person WHERE age > ?")?;
    let person_iter = stmt.query_map(params![20], |row| {
        Ok(Person {
            id: row.get(0)?,
            name: row.get(1)?,
            age: row.get(2)?,
        })
    })?;

    for person in person_iter {
        println!("Found person: {:?}", person?);
    }

    Ok(())
}

七、更新和删除数据

数据的更新和删除也是通过 execute 方法来完成的。下面展示如何对数据进行更新和删除:

rust 复制代码
fn main() -> Result<()> {
    let conn = Connection::open("my_database.db")?;

    // 更新数据
    conn.execute(
        "UPDATE person SET age = ? WHERE id = ?",
        params![60, 1],
    )?;

    // 删除数据
    conn.execute(
        "DELETE FROM person WHERE id = ?",
        params![1],
    )?;

    Ok(())
}

八、事务处理

使用 rusqlite 进行事务处理可以确保数据的一致性和完整性。transaction 方法可以用来包裹一系列数据库操作,确保它们要么全部成功,要么全部失败无效。下面的示例展示了如何使用事务:

rust 复制代码
use rusqlite::Connection;

fn main() {
    let conn = Connection::open("my_database.db").unwrap();
    
    // 开启事务
    let tx = conn.transaction().unwrap();

    // 执行一系列数据库操作
    tx.execute("INSERT INTO person (name, age) VALUES (?1, ?2)", &["Bob", 45]).unwrap();
    tx.execute("UPDATE person SET age = age + 1 WHERE name = ?1", &["Alice"]).unwrap();

    // 如果所有操作都成功,提交事务
    tx.commit().unwrap();
}

九、总结

rusqlite 是 Rust 中操作 SQLite 数据库的一个强大工具,它通过安全且符合 Rust 风格的接口,极大程度地简化了数据库的操作。应用 rusqlite,你可以专注于业务逻辑的构建,而不必担心底层 SQL 的繁琐。通过本文的介绍,我希望你能够对如何使用 rusqlite 有个清晰的认识,并能够在你自己的项目中愉快地使用它。

相关推荐
不可求~4 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
Lumistory4 小时前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
围炉聊科技7 小时前
长期免费的数据库方案——零成本基建系列
数据库
AC赳赳老秦7 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
梁辰兴9 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦9 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦10 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech10 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
Patrick_Wilson11 小时前
sccache 用在 Rust 上为什么常「不省编译」:原理、限制与 Windows 接入
ci/cd·rust·编译器
AI多Agent协作实战派11 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能