使用 Rust 语言连接操作 SQLite 数据库,我使用 rusqlite 这个 crate,
看例子:
首先,使用 cargo 创建一个 Rust 项目,然后添加依赖 rusqlite:
![8
9
dependencies]
rusqtite = "
o. 26.3](https://www.bailuqing2.cc/uploadenterprise/220122/297287220616011.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.bailuqing2.cc/uploadenterprise/220122/297287220616012.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.bailuqing2.cc/uploadenterprise/220122/297287220616014.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.bailuqing2.cc/uploadenterprise/220122/297287220616015.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.bailuqing2.cc/uploadenterprise/220122/297287220616017.png)

0 评论