当前位置:网站首页>(Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析
(Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析
2022-08-04 05:24:00 【superchao1982】
本文是对kettle8连接MySQL8之驱动问题的终极探讨,涉及到了MySQL和kettle的前世今生O(∩_∩)O~,也是对前人经验的全面总结。
【问题描述】
在使用(Kettle) pdi-ce-8.2 连接MySQL 8.x及以上数据库时,发现即使按照默认的规则,将与MySQL 8.x数据库对应的jar包放到Kettle的\data-integration\lib目录下,并且正确的填写数据库连接信息后,仍然不能连接成功。
【问题概述】
这还真不是kettle的锅,而是MySQL不讲武德,:-)
怎么说呢?因为Kettle 8默认支持的MySQL驱动类名称仍是MySQL 5.x版本jar包的名称com.mysql.jdbc.Driver,但是MySQL 8的驱动升级后不再兼容老版本,新的类名变为 com.mysql.cj.jdbc.Driver,所以就会出现明明把MySQL8的驱动放到kettle的lib中去了怎么就不行的情况。
【问题探秘】
我们都知道,JAVA的jar驱动包其实就是zip压缩包,例如下面的两个mysql驱动包:
我们可以用解压缩工具例如winRAR直接打开,如下图所示:
(TMD,老版本的MySQL5.x的jar包里面这么乱啊)可以发现,里面都包含了真正的驱动类:Driver.class;进一步的,我们可以用文本的方式打开来一探究竟:
上面的是MySQL5.x版本的Driver.class,我们可以看到里面有我专门用黄色荧光笔标记出来的com.mysql.jdbc.Driver的字样;
上面的是MySQL8.x版本的Driver.class,尼玛,里面清清楚楚的写了:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.翻译过来就是`com.mysql.jdbc.Driver'. 已经废弃了,新的驱动类是 `com.mysql.cj.jdbc.Driver',至此案情大名,罪魁祸首就是MySQL团队,kettle作为第三方很无辜,无罪释放!
MySQL你大爷的,你升级归升级,没事你改什么类名称啊?!
kettle说,新、老两套名称,我只能默认一个啊,哪边都有庞大的用户群,好锤子哦,啷个办嘛!干脆我开放一个类名输入框,让你自己来输;
【解决思路】
可以分为如下四种方法:
1.降级使用MySQL 5.x的驱动包,可以找较新的mysql-connector-java-5.1.49.jar放到kettle的lib中:
KETTLE安装及连接MySQL数据库_南蛮滴犊的博客-CSDN博客_kettle连接mysql数据库kettle安装(默认电脑已经安装java,并配置环境变量,该版本kettle对应jdk1.8)kettle下载地址:https://community.hitachivantara.com/docs/DOC-1009855下拉页面到此处,点击此处弹出下面界面,并弹出下载框点击浏览可更改下载地址打开kettle界面进入下载好的文件夹D:\pdi-ce-7.1....https://blog.csdn.net/sinat_32716451/article/details/81413658
2.仍然使用MySQL 8.x驱动jar包,但是需要使用JNDI的连接方式,将连接参数明文的写入jdbc.properties文件中:
3.仍然使用MySQL 8.x驱动jar包,但是连接时选择通用数据库即Generic Database连接方式,手动配置数据库URL和驱动包类名称:
4.仍然使用MySQL 8.x驱动包,也还用Native(JDBC),但是需要在选项中额外修改驱动包类名:
【方法评价】
第1种方法最懒,也最为简单粗暴,也能够连上用一会儿,但是,注意但是来了,这种方法不稳定,毕竟是使用的MySQL5.x的驱动来连接MySQL8.x的数据库,例如我的电脑(win10+jdk-8u202-windows-x64)采用这种方式后,电脑休眠后再进来,原封不动,之前能够连上的就怎么也连不上了,退出Spoon关闭kettle再重新启动都不行,所以不推荐这种方法;
第2种方法别辟蹊径,但是使用JNDI连接需要将数据库的连接参数都明文的写在kettle的配置文件里面,不灵活,也不够安全;
D:\Program Files\kettle\data-integration\simple-jndi目录下:
MYSQL8_DB/type=javax.sql.DataSource
MYSQL8_DB/driver=com.mysql.cj.jdbc.Driver
MYSQL8_DB/url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
MYSQL8_DB/user=root
MYSQL8_DB/password=123456
第3种方法比较好,不存在不匹配的问题,本质上是直接写数据库连接的URL,使用的仍然是对应的MySQL8.x驱动,不存在适配的问题!
第4种方法不知道那个帖子的作者是怎么做的,看他的图里面com.mysql那个jar包的名字都写掉了前面的c还能搞出来也是服了,反正对于pdi-ce-8.2版本我尝试了很久都不行,最后我使用新版本的pdi-ce-9.1了才行(要在数据库名称后面加上时区标识:&serverTimezone=Asia/Shanghai),
如下图所示:
边栏推荐
猜你喜欢
3面头条,花7天整理了面试题和学习笔记,已正式入职半个月
Towards Real-Time Multi-Object Tracking (JDE)
The difference between px, em, and rem
OpenSSF 安全计划:SBOM 将驱动软件供应链安全
7.18 Day23----标记语言
想低成本保障软件安全?5大安全任务值得考虑
el-Select selector bottom fixed
[One step in place] Jenkins installation, deployment, startup (complete tutorial)
4.3 Annotation-based declarative transactions and XML-based declarative transactions
el-Select 选择器 底部固定
随机推荐
关于yolo7和gpu
C1认证之web基础知识及习题——我的学习笔记
C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.4 Matching declarations to definitions
符号表
解决错误:npm WARN config global `--global`, `--local` are deprecated
Dynamic programming of the division of numbers
C Expert Programming Chapter 5 Thinking about Linking 5.1 Libraries, Linking and Loading
【JS】js给对象动态添加、设置、删除属性名和属性值
The 2022 PMP exam has been delayed, should we be happy or worried?
leetcode 12. 整数转罗马数字
MySQL日期函数
C专家编程 第5章 对链接的思考 5.1 函数库、链接和载入
9、动态SQL
3面头条,花7天整理了面试题和学习笔记,已正式入职半个月
MySql数据恢复方法个人总结
12. Paging plugin
C专家编程 第5章 对链接的思考 5.6 轻松一下---看看谁在说话:挑战Turning测验
px、em、rem的区别
8大软件供应链攻击事件概述
想低成本保障软件安全?5大安全任务值得考虑