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


 
							 
										
										 
										
										 
										
										
										 
										
										 
										
										 
										
										
0 评论