自己用纯Java写的这款Mysql客户端工具美哭了,求收藏~
背景
2022年着实有点忙,但是我依然坚持不放下编写代码,又苦于不写什么?在上半年的一场直播课准备中,一个短暂而宏伟的目标闪现到我的脑海,就是编写几个纯Java的软件。于是从3月份就开始着实计划实施。终于折腾出来了,现在分享给大家。
我先分享软件的界面,再给大家说说软件实现的原理!
下载地址
软件支持:Windwos 版本、Mac版本
软件特点
纯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;}}
