Rust 操作 sqlite3 数据库

举报
福州司马懿 发表于 2025/03/21 09:53:24 2025/03/21
143 0 0
【摘要】 在 Rust 中操作 SQLite 数据库,通常使用 rusqlite crate。rusqlite 是一个流行的 Rust 库,提供了对 SQLite 数据库的便捷访问。以下是如何使用 rusqlite 进行基本数据库操作的步骤。 步骤添加依赖:在你的 Cargo.toml 文件中添加 rusqlite 作为依赖。[dependencies]rusqlite = "0.29"建立数据库连接...

在 Rust 中操作 SQLite 数据库,通常使用 rusqlite crate。rusqlite 是一个流行的 Rust 库,提供了对 SQLite 数据库的便捷访问。以下是如何使用 rusqlite 进行基本数据库操作的步骤。

步骤

  1. 添加依赖
    在你的 Cargo.toml 文件中添加 rusqlite 作为依赖。

    [dependencies]
    rusqlite = "0.29"
    
  2. 建立数据库连接
    使用 rusqlite 提供的 Connection 对象来连接到 SQLite 数据库。

  3. 执行 SQL 语句
    使用 execute 方法执行不带返回结果的 SQL 语句(如 INSERTUPDATEDELETE)。

  4. 查询数据
    使用 queryquery_row 方法执行带返回结果的 SQL 查询。

下面是一个简单的示例,演示如何使用 rusqlite 进行基本的数据库操作。

示例代码

use rusqlite::{params, Connection, Result};

fn main() -> Result<()> {
    // 创建或打开一个 SQLite 数据库文件
    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 NOT NULL
                  )",
        [],
    )?;

    // 插入一些数据
    conn.execute(
        "INSERT INTO person (name, age) VALUES (?1, ?2)",
        params!["Alice", 30],
    )?;
    conn.execute(
        "INSERT INTO person (name, age) VALUES (?1, ?2)",
        params!["Bob", 25],
    )?;

    // 查询数据
    let mut stmt = conn.prepare("SELECT id, name, age FROM person")?;
    let person_iter = stmt.query_map([], |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(())
}

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

解释

  1. 打开数据库

    let conn = Connection::open("my_database.db")?;
    

    这行代码打开一个名为 my_database.db 的 SQLite 数据库文件。如果文件不存在,会自动创建。

  2. 创建表

    conn.execute(
        "CREATE TABLE IF NOT EXISTS person (
                 id    INTEGER PRIMARY KEY,
                 name  TEXT NOT NULL,
                 age   INTEGER NOT NULL
                 )",
        [],
    )?;
    

    这段代码创建一个名为 person 的表,包含 idnameage 三个字段。

  3. 插入数据

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

    使用 params! 宏来传递参数,避免 SQL 注入。

  4. 查询数据

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

    prepare 方法用于准备 SQL 查询,query_map 用于执行查询并映射结果到结构体。

  5. 打印结果
    迭代查询结果并打印每个 Person 对象。

这样,你就可以在 Rust 中使用 rusqlite 进行 SQLite 数据库操作了!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。