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(
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(
INTO person (name, data) VALUES (?1, ?2)",
&me.data),
)?;
// 查询
conn.prepare("SELECT id, name, data FROM person")?; =
let person_iter = stmt.query_map([], |row| {
{
id: row.get(0)?,
name: row.get(1)?,
data: row.get(2)?,
})
})?;
for person in person_iter {
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)