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