【rust实战】rust博客系统4_连接数据库及查询数据

|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 问题 | 回答 | 解释 |
| 如何连接数据库 | 1.在Cargo.toml中添加 mysql 依赖项 mysql = "21.0.0" 2.在src/db/db.rs中写连接数据库的代码 use mysql::*; use mysql::prelude::* pub fn init_pool() -> Result<Pool> { let url = "mysql://root:123456@localhost:3306/dr_platform" Pool::new(url) } pub fn test_connection(pool: &Pool) -> mysql::Result<()>{ let mut conn = pool.get_conn()?; let result: Vec<User> = conn.query_map("SELECT * from users", |row|{ User::from_row(row) }) for user in &result { println!("{:?}", user); } Ok(()) } | ->:返回值 Result:枚举类型 可能会产生两种结果,成功或失败 enum Result<T, E> { OK(T), Err(E), } Result没有指定这两个参数时,通常是在泛型上下文中,具体类型在其他地方被指定了 mysql::Result<()>: T被替换成了(), 即单元类型,表示这个函数不返回值 let mut conn = pool.get_conn()?; ?用户传播错误 ? :如果get_conn返回的Err变体,则?会提前返回,并将错误传给调用者 为什么不用::而用. .调用对象的方法 ::访问关联函数或者静态方法 let result: Vec<User> 声明result变量 类型为 Vec<User> conn.query_map("SELECT * from users",|row| { 调用conn的query_map |row|为闭包参数 |
| | 3.在 src/models/user.rs中写接口体接收查到得数据 use mysql::{prelude::*}; #[derive(Debug)] pub struct User { pub id: i32, username: String } impl User { pub fn from_row(row: mysql::Row) -> Self { User { id:row.get("id").expect("REASON"), username:row.get("username").expect("REASON") } } } | expect:是一个Option类型上定义的方法 Option类型是一个枚举值类型,它可以有两个值,一个是Some(T) 一个是None, 当使用get检索数据时,如果键值存在,返回Some(T), 如果键值不存在,返回None,会引发一个带有指定消息(这里时REASON)的panic错误 |

相关推荐
Mr -老鬼2 小时前
Rust适合干什么?为什么需要Rust?
开发语言·后端·rust
Mr -老鬼3 小时前
Rust与Go:从学习到实战的全方位对比
学习·golang·rust
superman超哥5 小时前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程
古城小栈6 小时前
Rust 已经自举,却仍需GNU与MSVC工具链的缘由
开发语言·rust
古城小栈16 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
peterfei21 小时前
IfAI v0.2.8 技术深度解析:从"工具"到"平台"的架构演进
rust·ai编程
栈与堆1 天前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
superman超哥1 天前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
福大大架构师每日一题1 天前
2026年1月TIOBE编程语言排行榜,Go语言排名第16,Rust语言排名13。C# 当选 2025 年度编程语言。
golang·rust·c#
superman超哥1 天前
精确大小迭代器(ExactSizeIterator):Rust性能优化的隐藏利器
开发语言·后端·rust·编程语言·rust性能优化·精确大小迭代器