版本 8.0.24 是 8.0 系列 MySQL Connector/J 的最新通用版本。它适用于 MySQL 服务器版本 8.0、5.7 和 5.6。它支持 Java 数据库连接 (JDBC) 4.2 API,并实现了 X DevAPI。
-
X DevAPI: 对于 X 协议连接,服务器现在提供三种新的断开连接通知:
Server shutdown
: 这是由于服务器关闭。它会导致 Connector/J 终止连接到连接池中服务器的所有活动和空闲会话,并显示错误消息“正在关闭服务器”。Connection idle
:这是由于连接空闲时间超过相关超时设置。它会导致 Connector/J 关闭当前连接并显示错误消息“IO Read error: read_timeout exceeded”。Connection killed
:这是由于连接被另一个客户端会话终止。它会导致 Connector/J 关闭当前会话中的连接,并显示错误消息“Session was killed”。
-
引入了一个新的连接属性 scrollTolerantForwardOnly,它通过容忍 type 的结果集上的向后和绝对光标移动来保留 Connector/J 8.0.17 及更早版本的遗留行为
ResultSet.TYPE_FORWARD_ONLY
。这是为了保持与利用旧行为的遗留代码的兼容性。有关详细信息,请参阅 scrollTolerantForwardOnly 的说明。(缺陷号 31747910)参考资料:另请参阅:Bug #30474158。
Connector/J 现在支持 JDBC 连接的“无用户”身份验证:当未指定连接用户时,Connector/J 使用运行应用程序的 OS 用户的名称与 MySQL 服务器进行身份验证。有关更多详细信息,请参阅 连接器/J:从中获取连接
DriverManager
。从此版本开始,只要为连接属性 defaultAuthenticationPlugin显式设置身份验证插件,当 Connector/J 与服务器协商插件时,指定的插件优先于服务器的默认插件。如果没有为该属性显式设置值,则 Connector/J 的行为不会发生变化,在这种情况下,服务器对默认插件的选择优先
mysql_native_password
于 Connector/J 的隐式默认值。详见 defaultAuthenticationPlugin 的说明。过去,对于 JDBC 连接,当服务器因为客户端空闲时间超过服务器
wait_timeout
系统变量指定的时间而关闭会话时,Connector/J 会返回一个通用的 IO 错误。Connector/J 现在从服务器中继更清晰的错误消息。
X DevAPI: 同时从同一个 X DevAPI
Client
对象获取和关闭多个会话可能会导致ConcurrentModificationException
Connector/J 在会话结束时抛出异常。(缺陷号 31699993)X DevAPI: 在某些特定条件下,当使用 Deflate 作为压缩 X 协议连接的算法时,Connector/J 抛出一个
AssertionFailedException
(ASSERTION FAILED: Unknown message type: 57
)。这是因为当压缩数据包仅比 Java 使用的某些内部缓冲区的大小时长几个字节InflaterInputStream
时,膨胀过程中剩余的字节将被 Connector/J 丢弃,导致后续数据包的膨胀失败。通过此修复,不会丢弃任何数据字节,并且通货膨胀按预期进行。(缺陷 #31510398,缺陷 #99708)当 a
SecurityManager
到位时,除非客户端已正确配置为使用基于 SASL 的 LDAP 身份验证,否则无法建立与 MySQL 服务器的连接。这是因为AuthenticationLdapSaslClientPlugin
在 Connector/J 中需要特殊权限才能MySQLScramShaSasl
在SecurityManager
到位;但是由于在插件初始化期间提供程序是由静态初始化程序加载的,因此缺少权限会导致错误,然后所有连接都会失败,即使从未使用或启用插件也是如此。此修复更改了提供程序的加载方式:加载现在仅在插件实例初始化时发生,并且初始化被推迟到实际需要插件时,因此不使用基于 SASL 的 LDAP 身份验证的连接不受安全性影响关于插件的设置。(错误#32526663,错误#102188)使用 Connector/J 8.0.23 时,
ResultSetMetaData.getColumnClassName()
未返回与DATETIME
列对应的正确类名。(漏洞 #32405590,漏洞 #102321)当它是通过查询具有派生值的视图生成时, 创建
UpdatableResultSet
失败并带有a。NullPointerException
(错误#32338451,错误#102131)当列的值超过 2 32 − 1 时,在for (or )
getLong()
的CHAR_OCTET_LENGTH
列上 使用会导致 异常。使用此补丁,在这种情况下会返回2 32 − 1 的值。(缺陷 #32329915,缺陷 #102076)ResultSet
DatabaseMetaData.getProcedureColumns()
getFunctionColumns()
NumberOutOfRange
ConnectionPropertiesTransform
当用户使用连接属性 propertiesTransform 提供接口的实现时,无法建立与服务器 的连接。这是因为调用了 Connector/JPropertyKey.PORT.getKeyName()
而不是PropertyKey.HOST.getKeyName()
获取主机名,并且此修复已更正了这一点。(错误#32151143,错误#101596)当执行
NullPointerException
不能用作 a 的语句ServerPreparedStatement
并且连接属性 useUsageAdvisor 设置为时返回true
A。通过此修复,将SQLException
返回 a。(错误#32141210,错误#101558)在关闭的连接上使用该
setSessionMaxRows()
方法会导致NullPointerException
. 通过此修复,将SQLNonTransientConnectionException
抛出错误消息“连接关闭后不允许进行任何操作”。(漏洞 #22508715)当要设置的值有小数部分,或者当值不符合日期和时间文字中描述的任何模式时, 使用
setObject()
目标类型的方法会Types.TIME
导致 。这个补丁引入了一个可以处理小数部分的新逻辑;此外,它根据文字的模式执行转换,并在需要时根据目标数据类型执行转换。(缺陷号 20391832)SQLException