当前位置:网站首页>(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),
如下图所示:

边栏推荐
猜你喜欢

sql server如何得到本条记录与上一条记录的差异,即变动值

TSF微服务治理实战系列(一)——治理蓝图

字节最爱问的智力题,你会几道?

擎朗智能全国研发创新中心落地光谷:去年曾获2亿美元融资

About yolo7 and gpu

Turn: Management is the love of possibility, and managers must have the courage to break into the unknown

npm安装依赖报错npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUND

8、自定义映射resultMap

Towards Real-Time Multi-Object Tracking (JDE)

The difference between px, em, and rem
随机推荐
4.2 声明式事务概念
一个对象引用的思考
word 公式编辑器 键入技巧 | 写数学作业必备速查表
DataTable使用Linq进行分组汇总,将Linq结果集转化为DataTable
Grain Mall - Basics (Project Introduction & Project Construction)
npm init [email protected] 构建项目报错SyntaxError: Unexpected token ‘.‘解决办法
How to view sql execution plan offline collection
C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.5 数组和指针的其他区别
腾讯136道高级岗面试题:多线程+算法+Redis+JVM
leetcode 12. Integer to Roman numeral
C Expert Programming Chapter 4 The Shocking Fact: Arrays and Pointers Are Not the Same 4.3 What is a Declaration and What is a Definition
Typora 使用保姆级教程 | 看这一篇就够了 | 历史版本已被禁用
C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.2 Why does my code not work
string类简介
5个开源组件管理小技巧
Turn: Management is the love of possibility, and managers must have the courage to break into the unknown
企业需要知道的5个 IAM 最佳实践
MySQL数据库(基础)
渗透测试(PenTest)基础指南
力扣:62.不同路径