Rust 连接 SQLite 数据库 – yangxu
使用 Rust 语言连接操作 SQLite 数据库,我使用 rusqlite 这个 crate。
看例子:
首先,使用 cargo 创建一个 Rust 项目,然后添加依赖 rusqlite:
![8
9
dependencies]
rusqtite = "
o. 26.3](https://www.zixueka.com/wp-content/uploads/2024/01/1706695509-a87f2e41d63267a.png)
来到 main.rs,其余所有的代码都写在这里。
首先引入 rusqlite 相关的类型,并建立一个 Person struct:
![@ main.rs U X
src > @ main.rs > „
1
2
3
4
5
6
7
8
use rusqlite :: {params,
Åderive(Debug)]
struct Person {
id: i32,
name: String,
Connection ,
Result};
data: Option<Vec<u8>>,](https://www.zixueka.com/wp-content/uploads/2024/01/1706695509-ca4f262e0c31f64.png)
Person 有三个字段,id、name 和 data,其实本例中,我们只会用到前两个字段。
下面,编写一个用来创建数据库和 person 表的函数:

该函数会创建名为 data.db 的数据库文件(如果不存在的话),然后打开一个数据库lian jie,并删除 person 表(如果存在的话),然后再建立一个 person 表,最后将 Connection 返回。
接下来,我们再创建一个 insert_data 函数,它用来插入两条数据,它使用 create_db 函数返回的 Connection 的引用作为参数:
![fn insert_data(conn: &Connection) Result<()> {
Person {
let pl
id:
1,
"Dave" .to_string(),
name :
data: None,
Person {
let p2
id:
2,
"Nick" .
name :
data: None,
conn . execute(
"INSERT INTO person (id, name, data)
VALUES (?1, ?3),
params![pl.id, pl. name, pl. data, p2.id,
p2 . name,
p2.data],](https://www.zixueka.com/wp-content/uploads/2024/01/1706695510-cc010e02941ac05.png)
再创建一个可以从数据库查询数据的函数 get_data,它会返回一个 Person 的 Vec:
![fn get_data(conn: 8Connection) Result<Vec<Person>> {
let
let
let
for
conn.prepare( "SELECT id, name, data from person")? ;
mut stmt
I rowl {
stmt . [ ] ,
persons _ iterator -
Ok(Person {
id: row. get(ø)?,
name: row.get(l)?,
data: row.get(2)?,
mut persons = Vec :: new();
p in persons _ iterator {
persons . push(p?);
Ok(persons)](https://www.zixueka.com/wp-content/uploads/2024/01/1706695510-2301c83e3042ce5.png)
最后,我们在 main 函数里依次调用这些函数,并把从数据库读取的数据进行打印:

运行结果:
![(base) solenovex@yangxus—MacBook—Pro—15 sqlite % cargo run
Compiling
Finished
Running
Person {
Person {
sqlite v0.1.0 (/Users/s01enovex/Projects/sq1ite)
dev [unoptimized + debuginfo] target(s) in 0.40s
Hi:
Hi:
target/ debug/sqlite
id: 1, name: "Dave" ,
id: 2, name:
"Nick" ,
data: None }
data: None }](https://www.zixueka.com/wp-content/uploads/2024/01/1706695511-7e3ffb555634133.png)


