前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust 连接 SQLite 数据库

Rust 连接 SQLite 数据库

作者头像
solenovex
发布2022-03-10 16:49:59
2.7K0
发布2022-03-10 16:49:59
举报
文章被收录于专栏:草根专栏草根专栏

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

看例子:

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

8 
9 
dependencies] 
rusqtite = " 
o. 26.3
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>>,
@ 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
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],
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)
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);
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 }
(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 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档