拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Rust 连接 SQLite 数据库

Rust 连接 SQLite 数据库

白鹭 - 2022-02-23 2184 0 0

使用 Rust 语言连接操作 SQLite 数据库,我使用 rusqlite 这个 crate,

看例子:

首先,使用 cargo 创建一个 Rust 项目,然后添加依赖 rusqlite:

8 
9 
dependencies] 
rusqtite = " 
o. 26.3

 

来到 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>>,

Person 有三个栏位,id、name 和 data,其实本例中,我们只会用到前两个栏位,

 

下面,撰写一个用来创建数据库和 person 表的函式:

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
fn 
create_db() Result<Connection> { 
let 
database file 
"data. db"; 
Connection :: ; 
let conn 
let 
conn.execute( "DROP TABLE person" , 
conn. execute( 
"CREATE TABLE person ( 
id 
name 
data 
a, 
Ok(conn) 
INTEGER PRIMARY KEY, 
TEXT NOT NULL, 
BLOB

该函式会创建名为 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],

 

再创建一个可以从数据库查询资料的函式 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)

 

最后,我们在 main 函式里依次呼叫这些函式,并把从数据库读取的资料进行打印:

fn main() { 
- create_db()?; 
let conn 
get_data(&conn)? 
let 
persons 
persons { 
for p 
in 
print In! ("Hi: , 
p);

 

运行结果:

(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 }

 

杨旭技术专栏

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *