Rust 连接 SQLite 数据库


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

看例子:

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

8 
9 
dependencies] 
rusqtite =

 

来到 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 的数据库文件(如果不存在的话),然后打开一个数据库lian jie,并删除 person 表(如果存在的话),然后再建立一个 person 表,最后将 Connection 返回。

 

接下来,我们再创建一个 insert_data 函数,它用来插入两条数据,它使用 create_db 函数返回的 Connection 的引用作为参数:

fn insert_data(conn: &Connection) Result<()> { 
Person { 
let pl 
id: 
1,

 

再创建一个可以从数据库查询数据的函数 get_data,它会返回一个 Person 的 Vec:

fn get_data(conn: 8Connection) Result<Vec<Person>> { 
let 
let 
let 
for 
conn.prepare(

 

最后,我们在 main 函数里依次调用这些函数,并把从数据库读取的数据进行打印:

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

 

运行结果:

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