vlambda博客
学习文章列表

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


背景

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


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


下载地址

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

软件特点

  • 纯Java开发

  • 免费使用

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

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

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

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

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

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

默认的界面,简洁清晰


功能支持

  • 基本实现了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; }}