Rust 中使用 rusqlite 操作 sqlite 數據庫

Rusqlite 是 Rust 中使用 sqlite 的一個庫。推薦使用該庫,它功能強大。

添加該庫,

rusqlite = { version = "0.29.0", features = ["bundled"] }

bundled 使我們能夠以最新的方式自動編譯和鏈接 SQLite 的版本。這避免了許多常見的構建問題,並且避免依賴於用戶系統上的 SQLite 版本(或系統),其可能是舊的或缺失的。使用該特性是大多數人控制自己的 SQLite 數據庫的正確選擇。

下面是簡單的使用案例,介紹了打開數據庫,創建表,插入記錄及查詢記錄。

use rusqlite::{Connection, Result};
#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    data: Option<Vec<u8>>,
}
fn main() -> Result<()> {
    let conn = Connection::open_in_memory()?;
    // 打開連接
    conn.execute(
        "CREATE TABLE person (
            id    INTEGER PRIMARY KEY,
            name  TEXT NOT NULL,
            data  BLOB
        )",
        (), // empty list of parameters.
    )?;
    let me = Person {
        id: 0,
        name: "Steven".to_string(),
        data: None,
    };
    // 插入記錄,刪除和更新也是同樣的操作
    conn.execute(
        "INSERT INTO person (name, data) VALUES (?1, ?2)",
        (&me.name, &me.data),
    )?;
    // 查詢
    let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;
    let person_iter = stmt.query_map([], |row| {
        Ok(Person {
            id: row.get(0)?,
            name: row.get(1)?,
            data: row.get(2)?,
        })
    })?;
    for person in person_iter {
        println!("Found person {:?}", person.unwrap());
    }
    Ok(())
}

Connection::open 使用數據庫文件,如果數據庫文件不存在,將創建它。

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

數據庫事務操作,使用 Connection::transaction 開始事務,除非使用 Transaction::commit 顯式提交,否則事務將回滾。

let tx = conn.transaction()?;
tx.execute("delete from cat_colors", NO_PARAMS)?;
tx.execute("insert into cat_colors (name) values (?1)"&[&"lavender"])?;
tx.execute("insert into cat_colors (name) values (?1)"&[&"blue"])?;
tx.commit();

事務操作,就是這樣三板斧,先開始事務,然後執行事務要操作的 SQL 語句,最後提交事務。在提交事務之前發生任何錯誤都會回滾。

更多詳細內容請查看 rusqlite - Rust (docs.rs)

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/aUC35YlWlh9La79IF-UWlA