开发一套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的 日志封装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

open-instruct - 训练开放式指令跟随语言模型

文章目录 关于 open-instruct设置训练微调偏好调整RLVR 污染检查开发中仓库结构 致谢 关于 open-instruct github : https://github.com/allenai/open-instruct 这个仓库是我们对在公共数据集上对流行的预训练语言模型进行指令微调的开放努力。我们发布这个仓库&#xff0c;并…

38 基于单片机的宠物喂食(ESP8266、红外、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用L298N驱动连接P2.3和P2.4口进行电机驱动&#xff0c; 然后串口连接P3.0和P3.1模拟ESP8266&#xff0c; 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…

Mac安装及合规无限使用Beyond Compare

文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异&#xff0c;并支持文…

详细分析 npm run build 基本知识 | 不同环境不同命令

目录 前言1. 基本知识2. 构建逻辑 前言 关于部署服务器的知识推荐阅读&#xff1a;npm run build部署到云服务器中的Nginx&#xff08;图文配置&#xff09; 1. 基本知识 npm run 是 npm 的一个命令&#xff0c;用于运行 package.json 中定义的脚本&#xff0c;可以通过 “s…

水体分割检测 包含YOLOV,COCO,VOC三种标记的数据集包含 857张图片

说明 水体分割检测指的是利用深度学习模型进行水体区域的分割和检测。YOLO&#xff08;You Only Look Once&#xff09;是一种流行的实时目标检测算法&#xff0c;其主要特点是速度快&#xff0c;适合于实时场景下的目标检测。 在水体分割检测中&#xff0c;可以使用YOLO算法来…

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题 2024/11/28 16:17 缘起&#xff1a;中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常&#xff1a;rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libwxgtk3.0-de…

除了 Docker,还有哪些类似的容器技术?

在容器技术领域&#xff0c;除了广为人知的Docker&#xff0c;还有其他一些类似的技术。 Podman是一种无守护进程的容器引擎&#xff0c;主要应用于Linux系统容器管理与运行。与Docker的显著区别在于其无需长期运行的守护进程&#xff0c;这一特性在安全敏感环境中极具价值&…

JAVA:Spring Boot 实现接口防抖的技术指南

1、简述 在 Web 应用中&#xff0c;接口防抖是一种常见的技术手段&#xff0c;用于防止客户端在短时间内多次触发同一接口&#xff0c;从而减轻服务器的负担和防止重复操作。本文将介绍如何在 Spring Boot 项目中实现接口防抖功能&#xff0c;并通过实例展示其应用场景。 2、防…

连续变量的 交叉熵 如何计算 python tensorflow

连续变量的交叉熵通常在机器学习中的回归问题中使用&#xff0c;但它也可以用于分类问题&#xff0c;当概率分布是连续的时。连续变量的交叉熵计算公式如下&#xff1a; 设 \( p(x) \) 是真实概率密度函数&#xff0c;\( q(x) \) 是预测概率密度函数&#xff0c;交叉熵 \( H(p…

gitee:创建仓库,存入本地文件至仓库

一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…

burpsuite(2)最新版burpsuite安装教程

一、安装Java 1.安装jdk21&#xff0c;直接官网下载 下载链接&#xff1a;Java21 2.cmd 输出java&#xff08;查看java是否已经被安装&#xff09; 3.java -version&#xff08;查看java版本&#xff09; 二、安装burpsuite 4.下载burpsuite最新版本&#xff0c;选择jar方式…

Java 语言的起源发展与基本概念(JDK,JRE,JVM)

Java语言的起源 源起 Java语言最初是由Sun Microsystems公司&#xff08;该公司于2009年被Oracle公司收购&#xff09;开发的一种编程语言。其创造者是詹姆斯高斯林&#xff08;James Gosling&#xff09;&#xff0c;他是一位加拿大计算机科学家。其前身名为Oak&#xff08;橡…

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录 前言架构软件包下载 一、准备工作1. Linux 网络设置2. 配置hosts文件3. 配置免密登录4. 设置 NTP 时钟同步5. 关闭防火墙6. 关闭交换分区7. 调整内存映射区域数限制8. 调整文件、进程、内存资源限制 二、JDK 安装1. 解压软件2. 配置环境变量3. 验证软件 三、安装 Elas…

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…

26页PDF | 数据中台能力框架及评估体系解读(限免下载)

一、前言 这份报告详细解读了数据中台的发展历程、核心概念、能力框架及成熟度评估体系。它从阿里巴巴的“大中台&#xff0c;小前台”战略出发&#xff0c;探讨了数据中台如何通过整合企业内部的数据资源和能力&#xff0c;加速业务迭代、降低成本&#xff0c;并推动业务增长…

使用R的数据包快速获取、调用各种地理数据

数据一直是科学研究绕不开的话题&#xff0c;为了方便快捷的获取各种地理数据&#xff0c;许多R包被开发出来&#xff0c;今天介绍一些方便快捷的数据R包。 rnaturalearth 包使 Natural Earth 数据可用。自然地球特征包括 1&#xff1a;10m、1&#xff1a;50m 和 1&#xff1a…

docker的joinsunsoft/docker.ui修改密码【未解决】

docker的joinsunsoft/docker.ui修改密码 前言 这个挺遗憾的&#xff0c;个人能力不足。想修改密码是不可能了。 因为&#xff0c;系统的密码加密规则不知道。 目前了解到的内容是&#xff1a; 地址是&#xff1a;https://hub.docker.com/r/joinsunsoft/docker.ui服务是用go语…

启动SpringBoot

前言&#xff1a;大家好我是小帅&#xff0c;今天我们来学习SpringBoot 文章目录 1. 环境准备2. Maven2.1 什么是Maven2.2 创建⼀个Maven项⽬2.3 依赖管理2.3.1 依赖配置2.3.2 依赖传递2.3.4 依赖排除2.3.5 Maven Help插件&#xff08;plugin&#xff09; 2.4 Maven 仓库2.6 中…

SQL进阶——JOIN操作详解

在数据库设计中&#xff0c;数据通常存储在多个表中。为了从这些表中获取相关的信息&#xff0c;我们需要使用JOIN操作。JOIN操作允许我们通过某种关系&#xff08;如相同的列&#xff09;将多张表的数据结合起来。它是SQL中非常重要的操作&#xff0c;广泛应用于实际开发中。本…

JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续

1、先贴出服务最后打印出来的日志&#xff0c;意思就是给虚拟机分配的内存被用完了&#xff0c;没有可用的内存了&#xff0c;服务运行不了了&#xff0c;被动停服了。详细的日志记录在了/home/user/zx/tomcat/apache-tomcat-8.5.82/bin/hs_err_pid147951.log文件里。 Java Ho…