Rust与SQLite数据库操作

2024年06月10日 Rust与SQLite数据库操作 极客笔记

Rust与SQLite数据库操作

SQLite是一个轻量级的嵌入式数据库引擎,它在大多数平台上都可以运行,并且不需要独立的服务器进程。Rust是一种系统级编程语言,与C++类似,它也可以用于编写高性能的应用程序。在这篇文章中,我们将探讨如何在Rust中操作SQLite数据库。

安装SQLite

在Rust中操作SQLite之前,我们首先需要安装SQLite数据库引擎。你可以在SQLite的官方网站上下载适合你操作系统的预编译的SQLite库,也可以通过包管理工具安装SQLite

以Ubuntu系统为例,你可以使用以下命令安装SQLite

sudo apt install sqlite3 libsqlite3-dev

对于其他操作系统,你可以查看官方文档或者使用相应的包管理工具进行安装。

Rust中使用rusqlite库

在Rust中操作SQLite数据库需要使用第三方库rusqlite。你可以在Cargo.toml文件中添加rusqlite的依赖:

[dependencies]
rusqlite = "0.23.1"

然后在你的Rust文件中引入rusqlite库:

use rusqlite::{Connection, Result};

连接到数据库

在Rust中连接到SQLite数据库非常简单,你只需要调用Connection::open()方法并传入数据库文件的路径即可。如果数据库文件不存在,它会自动创建一个新的数据库文件。

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

    // 执行数据库操作

    Ok(())
}

创建表

在SQLite中创建表非常简单,你只需要执行一个SQL语句即可。在Rust中,你可以使用execute()方法执行SQL语句:

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

插入数据

插入数据也非常简单,你只需要执行一个INSERT语句即可。在Rust中,你可以使用execute()方法执行SQL语句并传入参数:

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

查询数据

查询数据也非常简单,你可以使用prepare()方法准备一个查询语句,并使用query_map()方法获取查询结果:

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

for user in users {
    println!("{:?}", user);
}

更新数据

更新数据也非常简单,你可以执行一个UPDATE语句即可:

conn.execute(
    "UPDATE users SET age = ?1 WHERE name = ?2",
    &[&40, &"Alice"],
)?;

删除数据

删除数据也非常简单,你可以执行一个DELETE语句即可:

conn.execute(
    "DELETE FROM users WHERE name = ?1",
    &[&"Alice"],
)?;

完整示例

下面是一个完整的示例,演示了如何在Rust中连接到SQLite数据库,并执行各种操作:

use rusqlite::{Connection, Result};

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

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

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

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

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

    for user in users {
        println!("{:?}", user);
    }

    conn.execute(
        "UPDATE users SET age = ?1 WHERE name = ?2",
        &[&40, &"Alice"],
    )?;

    conn.execute(
        "DELETE FROM users WHERE name = ?1",
        &[&"Alice"],
    )?;

    Ok(())
}

总结

在这篇文章中,我们探讨了如何在Rust中操作SQLite数据库。我们学习了如何连接到数据库、创建表、插入数据、查询数据、更新数据和删除数据。通过这些操作,你可以在Rust应用程序中使用SQLite数据库存储和管理数据。

本文链接:http://so.lmcjl.com/news/6324/

展开阅读全文