同一个java项目兼容mysql多版本(8.0,5.6,5.1)

mysql兼容多版本

公司有一个报表系统,可提供用户录入数据源并展示统计结果,由于数据源是用户自己手动录入的,mysql 版本有很多(本身系统支持多种数据源,本次只讨论mysql兼容问题),需要同时兼容5.1,5.6,5.7,8.0及以上版本,在此记录一下方法。

使用的jar包

项目默认使用的是mysql-connector-java-8.0.16.jar,但是8.0可以兼容5.6及以上版本,不兼容5.1版本,所以在获取数据库连接的时候,需要转换一下驱动。如果所有mysql版本都在5.6及以上,可以直接使用Class.forName(JDBC_MYSQL_DRIVER)来更换驱动,但是要连接5.1版本,需要下一步操作。

获取5.1版本驱动

在项目中加入mysql-connector-java-5.1.34.jar包,可以放在resource下,也可新建目录,保证路径可以加载即可,手写类加载器,将mysql-connector-java-5.1.34.jar包的com.mysql.jdbc.Driver加载进来,然后获取连接,代码如下:

public class MyClassloader extends URLClassLoader {public static final Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();public MyClassloader(URL[] urls) {super(urls);}@Overridepublic Class<?> loadClass(String name) throws ClassNotFoundException {Class<?> classLoaded = classMap.get(name);if (classLoaded != null) {return classLoaded;}Class<?> findClass = null;try {findClass = findClass(name);} catch (Exception e) {//还可以从父类查找,这个异常吞掉,如果没有父类会抛出}if (findClass != null) {classMap.put(name, findClass);return findClass;}return super.loadClass(name);}@Overrideprotected Package getPackage(String name) {return null;}}
@Service
public class ClassUrlsLoader {public Logger logger = LoggerFactory.getLogger(ClassUrlsLoader.class);public Map<String, URL[]> urlsMap = new HashMap<>();public URL[] getUrls(){URL[] urls = urlsMap.get("urls");if(urls != null){return urls;}try {// 获得File对象,当然也可以获取输入流对象String filePath = url +  "/mysql-connector-java-8.0.16.jar";InputStream inputStream = new FileInputStream(filePath);File file = new File(url + "/targetFile.tmp");FileUtils.copyInputStreamToFile(inputStream, file);URL url1 = file.toURL();urls = new URL[]{url1};urlsMap.put("urls", urls);logger.info("urls map:" + urls.length);return urls;} catch (IOException e) {e.printStackTrace();}return urls;}}

使用方法:

         String driverClass="com.mysql.cj.jdbc.Driver";//高版本驱动,获取mysql5的驱动,去掉cjMyClassloader loader = new MyClassloader(new ClassUrlsLoader().getUrls());Class<?> aClass = loader.loadClass(driverClass);Driver driver = (Driver) aClass.newInstance();

获取到驱动后就可以调用connect方法获取连接来使用了。

最后:
感谢!!
小白编辑,有问题请随时指正,不胜感激!!

关于一个项目兼容mysql多版本问题总结相关推荐

  1. 独家专访:SequoiaDB 3.0 版本正式发布!协议级完整兼容MySQL!

    SequoiaDB 3.0 版本正式发布!协议级完整兼容MySQL! 标签:SequoiaDB 3.0,MySQL,OLTP SequoiaDB巨杉数据库 3.0,在产品GA发布后,经过近半年在金融级 ...

  2. Web项目--------原Oracle数据库的项目同时兼容MySql

    原Oracle数据库的项目同时兼容MySql步骤: (一)修改资源配置文件applicationContext-dataSource.xml的数据库连接 Oracle数据库中加上from dual的原 ...

  3. 使用Intellij Idea创建第一个SpringBoot+MyBatis+MySql项目并运行(附安装教程),使用Maven构建项目并管理第三方jar

    Intellij Idea 背景 开发工具及主要框架 Maven 下载安装 settings.xml修改 IDEA配置Maven 注册私有jar Maven打包 MySql安装 配置环境变量 Inte ...

  4. 如何导入别人的android studio项目,解决gradle版本不兼容问题

    如何导入别人的android studio项目,解决gradle版本不兼容问题 参考文章: (1)如何导入别人的android studio项目,解决gradle版本不兼容问题 (2)https:// ...

  5. VUE项目兼容IE11 遇见的问题 SyntaxError: strict 模式下不允许一个属性有多个定义;ie11下载excel文件需要用navigator.msSaveBlob

    最近要把vue项目兼容ie11 前面引入bable等一系列操作就不说了,下面说一下具体具体的问题 1  如图所示  SyntaxError: strict 模式下不允许一个属性有多个定义, 点击sta ...

  6. 使用umi打包项目兼容低版本浏览器如safari,chrome等

    umi.js 中有运算符 Safari和低版本Chrome报错,参考 umijs.org 文档,配置正确的 targets 在umirc.js中配置targets 2.1.0+ 配置浏览器最低版本,会 ...

  7. 一个项目部署多个节点会导致锁失效么_不为人知的分布式锁实现,全都在这里了

    1引入业务场景 首先来由一个场景引入: 最近老板接了一个大单子,允许在某终端设备安装我们的APP,终端设备厂商日活起码得几十万到百万级别,这个APP也是近期产品根据市场竞品分析设计出来的,几个小码农通 ...

  8. 一个小时学会MySQL数据库

    致谢:一个小时学会MySQL数据库 一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库 ...

  9. 【转载】一个小时学会MySQL数据库

    一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数据库 ...

最新文章

  1. 2021-2027年中国室内定位市场研究及前瞻分析报告
  2. 关于服务器返回信息的Unicode转码的方法
  3. DedeCMS(织梦)安全设置经验分享
  4. java 观察者模式
  5. 学会这几招,你也可以用 Redis 做实时订阅推送!
  6. 通过反射获取无参无返回值成员方法并使用
  7. 安装UBUNTU Server 11.10
  8. Java的注解机制——Spring自动装配的实现原理
  9. ATK - Accessibility Toolkit - 辅助功能工具包
  10. 申通回应被京东“封杀”;Kotlin 1.4.0 发布 | 极客头条
  11. ajax 服务器怎么响应,Ajax 接收服务器返回的json响应方法
  12. 用python编写决策树算法_详细介绍python实现决策树C4.5算法
  13. SpringBoot实现导入功能
  14. python模拟ios点击_弱弱的问下,ios的捷径可以实现模拟点击吗?
  15. 支付宝小程序、百度小程序、微信小程序、今日头条小程序技术分析
  16. 黑群晖折腾之docker系列之迅雷远程下载
  17. STM32F100R4 单片机解密特性 ST芯片解密
  18. 2022泰迪杯数据分析技能赛B题方案及赛后总结:银行客户忠诚度分析
  19. csgo中国上海服务器因维护,2019CSGO亚洲邀请赛11月20日战火重燃 再临上海
  20. ASPCMS标签教程

热门文章

  1. Windows/Linux环境下达梦数据库的下载、安装及连接
  2. Linux驱动开发:字符设备驱动开发实战
  3. js验证表单用户名,密码
  4. 第16届 IEEE 极限编程大赛 参赛记录
  5. 2020级清华北大上交南大计算机保研经历
  6. 探索互联网时代STEAM教育创新之路
  7. 搜索引擎官网认证申请
  8. android实现抖音列表,Android使用RecyclerView实现抖音主界面
  9. 28岁前明白这几个道理,或将改变你的一生!
  10. 字符串之strcpy实现