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

【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.mrgr.cn/news/63897.html

相关文章:

  • Oracle 第11章:异常处理
  • 蓝牙 BLE 详解
  • 使用 Java 实现从搜索引擎批量下载图片
  • 在工作中常用到的 Linux 命令总结
  • 机器学习:我们能用机器学习来建立投资模型吗
  • 基于MATLAB驾驶行为的疲劳实时检测研究
  • 华为 HCIP-Datacom H12-821 题库 (41)
  • nodejs入门教程8:nodejs EventEmitter
  • HTML 基础标签——表单标签<form>
  • 基于java+SpringBoot+Vue的学生网上选课系统设计与实现
  • 1014:与圆相关的计算
  • 使用onnxruntime-web 运行yolov8-nano推理
  • 查缺补漏----关于计组两道题辨析
  • Leetcode 剑指 Offer II 100.三角形最小路径和
  • OR63 删除公共字符
  • 【JAVA 笔记】10 ch07_oop_fundamentals 面向对象编程(基础部分)
  • Linux网络配置与管理:掌握访问与管理的关键技能
  • C++ | Leetcode C++题解之第526题优美的排列
  • 闪存学习_1:Flash-Aware Computing from Jihong Kim
  • nodejs入门教程1:nodejs简介
  • 聊一聊Elasticsearch的索引的分片分配机制
  • 更懂你的AI助手来了
  • C#/.NET/.NET Core技术前沿周刊 | 第 11 期(2024年10.21-10.31)
  • 线性数据结构之队列
  • 字符串函数
  • 数据采集-Kepware 安装证书异常处理