自己用纯Java写的这款Mysql客户端工具美哭了,求收藏~

背景

2022年着实有点忙,但是我依然坚持不放下编写代码,又苦于不写什么?再上半年的一场直播课准备中,一个短暂而宏伟的目标闪现到我的脑海,就是编写几个纯Java的软件。于是从3月份就开始着实计划实施。终于折腾出来了,现在分享给大家。

我先分享软件的界面,再给大家说说软件实现的原理!

下载地址

  • 软件支持Windwos 版本、Mac版本

  • 下载地址:bg-boom-ui

软件特点

  • 纯Java开发

  • 免费使用

直入美图,期望大家多多支持

支持背景美图,支持本地图片、网络图片等

支持视频背景,支持TV、广播、小视频、直播流等

支持皮肤+背景图切换,海量图片可在软件中获取

默认的界面,简洁清晰

功能支持

  • 基本实现了Navicat的常用功能

  • 更多功能还在陆续开发,敬请期待~

软件的实现原理

软件通过Mysql的Jdbc驱动类进行实现,区别于其它软件基于Mysql通讯协议实现。

核心实现的连接管理实现如下(由于时间关系这里暂没有实现长连接):

package com.madou.dbtool.mysql.manager;

import com.madou.inters.util.TipUtils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * 管理多个数据库的数据源
 * @author miukoo
 */
public class ConnectionManagerFactory {

    private static final Map<String, Connection> CONNECTION_MAP = new HashMap<>();
    /**
     * 最大连接次数
     */
    private static final int maxRetry = 2;
    public static Connection getConnection(ConnectionInfo connectionInfo,String database) {
        return getConnection(connectionInfo, database, 0);
    }

    /**
     * 获取连接,并最多获取三次
     * @param connectionInfo
     * @param database
     * @param count
     * @return
     */
    private static Connection getConnection(ConnectionInfo connectionInfo,String database,int count) {
        if(count>maxRetry) {
            return null;
        }
        String id = String.format("%s-%s-%s",connectionInfo.getHost(),connectionInfo.getPort(),database);
        Connection connection = CONNECTION_MAP.get(id);
        if(connection==null) {
            try {
                String url = String.format("jdbc:mysql://%s:%d/%s?useUnicode=true&characterEncoding=UTF-8&connectTimeout=500", connectionInfo.getHost(), connectionInfo.getPort(), database);
                Class.forName("com.mysql.cj.jdbc.Driver");
                connection = DriverManager.getConnection(url, connectionInfo.getUsername(), connectionInfo.getPassword());
            } catch (Exception e) {
                if(count==maxRetry){
                    TipUtils.showErrorDialog("获取数据库连接失败:"+e.getMessage(),"Tips");
                }else if(count<maxRetry) {
                    return getConnection(connectionInfo, database,count+1);
                }
            }
        }else{
            try {
                if(connection.isClosed()){
                    connection=null;
                    if(count<maxRetry) {
                        return getConnection(connectionInfo, database,count+1);
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        CONNECTION_MAP.put(id,connection);
        return connection;
    }
}

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miukoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值