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

感谢AI

rust 复制代码
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的 日志封装

相关推荐
每天都要进步哦19 分钟前
SQL单行函数详解:字符、数字、日期、转换与通用函数全解析
数据库·mysql
不剪发的Tony老师23 分钟前
VeloxDB:一款免费开源的轻量级数据库管理工具
数据库·sql
dotnet9028 分钟前
批量生成所有表的修改脚本
数据库·sql·oracle
@Mike@35 分钟前
06-数据库学习笔记(存储模型与数据压缩)
数据库·笔记·学习
南凉北往1 小时前
PandasAI连接LLM对MySQL数据库进行数据分析
数据库·mysql·数据分析
回眸不遇1 小时前
详谈 QT 布局 QLayout::SizeConstraint 和 QSizePolicy 对 QWidget 尺寸的影响
数据库·qt·系统架构
2601_965798472 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php
zdl6862 小时前
EasyMarkets:“机器人商业化仍待验证”
数据库·机器人
Freak嵌入式2 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
Elastic 中国社区官方博客2 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai