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

开发一套ERP 第七弹 RUst 操作数据库

感谢AI

use std::fmt::format;
use mysql::*;
use lazy_static::lazy_static;
use std::sync::Mutex;
use std::thread::sleep;
use std::time::Duration;
use log::log;
use mysql::prelude::Queryable;
use data::base::{ListData,SqlInstance};
use crate::data;

lazy_static! {
    pub static ref MYSQL_USER:Mutex<String> = Mutex::new(String::from("root"));
    pub static ref MYSQL_PASSWORD:Mutex<String> = Mutex::new(String::from("123456"));
    pub static ref MYSQL_POOL: Mutex<Pool> = Mutex::new(Pool::new
        (format!("mysql://{}:{}@localhost::3306/ERP",MYSQL_USER.lock().unwrap().as_str(),
            MYSQL_PASSWORD.lock().unwrap().as_str()).as_str())
        .expect("Connection to Mysql Error"));
}

//FIXME: 链接出错直接关闭回收链接错误
#[allow(non_snake_case)]
fn MysqlPoolConnect(max_retries:i32,delay:u64) -> Result<PooledConn> {
    let mut attempts = 0;
    let retry_delay = Duration::from_secs(delay);  // 设置重试的间隔时间
    loop {
        attempts += 1;
        let pool = MYSQL_POOL.lock()?;
        let conn_result = pool.get_conn();
        match conn_result {
            Ok(conn) => {
                return Ok(conn);
            }
            Err(err) => {
                if attempts >= max_retries {
                    return Err(err);
                }
                eprintln!("Failed to connect to database, attempt {} of {}: {}", attempts, max_retries, err);
                sleep(retry_delay);
            }
        }
    }
}

#[allow(non_snake_case)]
pub fn MysqlPoolSql(query:&mut SqlInstance){
   match MysqlPoolConnect(3,1) {
       Ok(mut pool) => {
           query.buffer = pool.query_map(query.filter.as_str(),|(id,name)| ListData { id,name, name_and_color: "".to_string(), avatar: "".to_string(), zh_size: "".to_string(), u_size: "".to_string(), factory_name: "".to_string(), output: 0, input: 0, diff: 0, threshold: 0, inputDate: "".to_string(), outputDate: "".to_string() }).unwrap();
       }
       Err(err) => {
            query.result = false;
            eprintln!("Failed to connect to database: {}", err);
       }
   }
}

Rust 的全局静态挺麻烦,语言默认是非安全的操作

Rust 有spdlog的 日志封装


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

相关文章:

  • vue element-ui的el-image 和 el-table冲突层级冲突问题问题preview-teleported
  • canal同步数据教程
  • 第2.3 AI文本—prompt入门
  • 全文单词统计
  • 查询当天每个时间点上进退场人数思路
  • JVM 常见面试题及解析(2024)
  • 全国1000米分辨率逐月植被覆盖度(FVC)数据集(2000-2024)
  • 网络安全——--网络安全的基本概念--病毒防护--入侵检测技术与防火墙--虚拟专用网
  • C#里怎么样使用继承实现不同的功能,以及调用基类函数?
  • 在Linux中备份msyql数据库和表的详细操作
  • 【ChatGPT大模型开发调用】如何获得 OpenAl API Key?
  • Linux系统管理基础指南--习题
  • Python3 爬虫 Scrapy的安装
  • Docker容器ping不通外网问题排查及解决
  • 【uniapp】轮播图
  • 力扣整理版十:动态规划(待更新)
  • 【CLIP】3: semantic-text2image-search允许局域网访问
  • 卷积神经网络实现图像分类
  • 【HF设计模式】01-策略模式
  • 【Linux | 计网】TCP协议详解:从定义到连接管理机制
  • 【Spring源码核心篇-04】spring中refresh刷新机制的流程和实现
  • FPGA工具链及功能介绍
  • linux安装部署mysql资料
  • MFC图形函数学习12——位图操作函数
  • Jenkins-基于 SSH 实现 Jenkins 分布式
  • 远程视频验证如何改变商业安全