当前位置: 首页 > article >正文

【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错误

http://www.kler.cn/a/376834.html

相关文章:

  • git入门教程12:git命令与技巧
  • iOS中OC对象的本质
  • RHCE-SElinux+防火墙
  • Data+AI━━揭秘千亿参数背后的技术较量:全球巨头的大模型布局!
  • LSTM:解决梯度消失与长期依赖问题
  • 废弃物分类分割系统:入门训练营
  • 重构响应对象
  • Dockerfile文件编写
  • linux perf 环境部署和基本测试(基于Ubuntu20.04)
  • 探讨Java深搜算法的学习笔记
  • unreal engine5动画重定向
  • 域渗透-域环境部署
  • Spring Boot集成Milvus和deeplearning4j实现图搜图功能
  • 模拟示波器如何读数据?
  • HTML练习题:彼岸的花(web)
  • Spring学习笔记_20——@Profile
  • C++学习笔记----9、发现继承的技巧(七)---- 转换(2)
  • 区块链介绍
  • keepalive+mysql8双主
  • Java基于SpringBoot+Vue框架的房屋租赁管理系统(附源码,文档)
  • python在word的页脚插入页码
  • springboot 整合 modbus4j
  • Flutter图片控件(七)
  • 个人学习React Native的实际意义探讨
  • 练习LabVIEW第三十三题
  • 【C++】1968. 输出ascii码对应的字符