版本 8.0.8 开发里程碑是 MySQL Connector/J 8.0 分支的最新开发版本,提供了对即将推出的功能的深入了解。它适用于 MySQL 服务器版本 5.5、5.6、5.7 和 8.0。它支持 Java 数据库连接 (JDBC) 4.2 API。
打包: 用于安装 Connector/J 的 RPM 和 Debian 包现在可以从 Connector/J 下载页面获得。
-
X DevAPI: Connector/J 实现了 X Dev API 的新接口,允许检索、添加、删除和更新持久会话延续数据。实施包括以下内容:
保存会话配置数据集信息的
SessionConfig
对象。PersistenceHandler
允许自定义实现持久性处理程序 的接口。PasswordHandler
允许密码处理代码的自定义实现的接口 。一个
SessionConfigManager
用于编辑和获取Sessionconfig
对象以及定义和的实例的PersistenceHandler
类PasswordHandler
。
有关详细信息,请参阅MySQL Connector/J X DevAPI 参考。
X DevAPI:添加了 一个新的连接属性,
xdevapi.auth
用于指定使用 X 协议的连接的身份验证机制。允许的值为MYSQL41
、PLAIN
和EXTERNAL
。有关详细信息,请参阅配置属性中新属性的条目 。-
X DevAPI: 为了支持方法的 行锁 ,已经使用以下方法扩展 和
find()
FindStatement
SelecStatement
lockExclusive(),类似于
SELECT ... FOR UPDATE
关系表。lockShared(),它的工作方式类似于
SELECT ... LOCK IN SHARED MODE
(对于 MySQL 5.7)或SELECT ... FOR SHARE
(对于 MySQL 8.0)关系表。
有关详细信息,请参阅MySQL Connector/J X DevAPI 参考。
-
X DevAPI: Connector/J 现在支持
IN
andNOT IN
运算符的扩展语法,它可以检查一个子表达式是否包含在另一个表达式中;例如:// For documents coll.find("$.b IN [100,101,102]").execute(); coll.find("'some text with 5432' in $.a").execute(); coll.find("1 in [1, 2, 4]").execute(); coll.find("{'a': 3} not in {'a': 1, 'b': 2}").execute(); // For relational tables tbl.select().where("3 not in [1, 2, 4]").execute(); tbl.select().where("'qqq' not in $.a").execute(); tbl.select().where("{'a': 1} in {'a': 1, 'b': 2}").execute();
-
X DevAPI:对 X DevAPI 的 “
drop
”方法进行了一些更改:从.
dropCollection(schemaName, collectionName)
_dropTable(schemaName, tableName)
_Session
添加到 .
dropCollection(collectionName)
_dropTable(tableName)
Schema
Schema.dropView()
现在立即执行并返回void
;此外,ViewDrop
接口已被删除。Collection.dropIndex()
现在立即执行并返回void
;接口也DropCollectionIndexStatement
被删除了。即使要删除的对象不存在,“ ”方法现在 也会成功
drop
。
现在支持 从 MySQL
TIME
数据到 的转换。java.sql.Date
过去,getDate()
从 TIME 列检索数据会抛出一个SQLException
. 现在,这样的检索返回一个java.sql.Date
对象,其中包含从 Java 纪元开始以毫秒数表示的时间值;同样返回的是警告:“日期部分不存在于 SQL TIME 字段中,因此在转换为 java.sql.Date 时将其设置为格林威治标准时间 1970 年 1 月 1 日。” (错误号 26750807)现在可以使用新的连接属性
enabledTLSProtocols
来覆盖用于连接的 TLS 版本的默认限制,这些限制由所连接的 MySQL 服务器的版本决定。通过向此选项提供以逗号分隔的值列表(例如, “ TLSv1,TLSv1.1,TLSv1.2 ”),用户可以,例如,阻止连接使用旧的 TLS 版本,或允许连接仅使用 TLS 版本由用户编译的 MySQL 服务器支持。有关详细信息,请参阅配置属性中新属性的条目 。感谢 Todd Farmer 贡献代码。(漏洞#26646676)使用最新的 IANA 和 CLDR 时区数据库更新时区映射。(缺陷号 25946965)
已添加
loadBalancingStrategy
名为连接属性 的新选项。serverAffinity
新连接属性中列出的服务器serverAffinityOrder
(应该是连接 URL 的主机列表中服务器的子集)按照它们列出的顺序进行联系,直到服务器可用或直到服务器列表耗尽,此时点随机负载平衡策略用于未列出的主机serverAffinityOrder
。loadBalancingStrategy
有关详细信息, 请参阅配置属性serverAffinityOrder
中 的描述。(缺陷号 20182108)
重要变化: 随着 MySQL Server 8.0.3 的变化,系统变量
tx_isolation
和tx_read_only
已被替换transaction_isolation
和transaction_read_only
。用户应将 Connector/J 更新到最新版本以连接到 MySQL 8.0.3。如果他们在代码中使用旧变量,他们也应该对自己的应用程序进行相同的调整。(缺陷号 26440544)X DevAPI:使用空参数 调用
schema.dropView()
导致NullPointerException
. (缺陷号 26750807)X DevAPI: 当
dropCollection()
应用于空集合时,NullPointerException
发生了。(缺陷号 26393132)当使用缓存的服务器端准备好的语句时,由于在语句被释放时保留对打开的语句的引用而发生内存泄漏;当该
close()
方法在一条语句上被调用两次,或者当一条语句的缓存条目存在冲突并且旧条目尚未关闭并从打开的语句列表中删除时,就会发生这种情况。此修复可确保在两种情况下正确关闭语句。感谢 Eduard Gurskiy 为修复做出的贡献。(漏洞 #26633984,漏洞 #87429)Bug#63800 的回归测试失败,因为
explicit_defaults_for_timestamp
MySQL Server 系统变量的默认值自 8.0.2 版本以来已更改。已对测试进行调整以将更改考虑在内。(漏洞 #26501245)针对 MySQL Server 8.0 运行可调用语句导致
SQLException
:结果集来自更新。没有数据。(缺陷号 26259384)当未提供自定义信任库时,安全 JDBC 连接不会退回到默认信任库。(缺陷号 26243128)
在
com/mysql/jdbc/ServerPreparedStatement.java
中,参数resultSetType
和resultSetConcurrency
调用Connection.preparedStatement()
被交换了。(漏洞 #25874048,漏洞 #85885)一些 JDBC 代理对象缺少对
equals()
方法的正确处理,因此即使将这些代理对象之一与其自身进行比较也会equals()
产生错误。equals()
此补丁在所有相关代理中引入了对该方法的正确处理。(缺陷 #21931572,缺陷 #78313)当缓存原始语句时再次准备相同的语句时,服务器端准备好的语句不会关闭。这是由新语句静默替换旧语句的缓存条目引起的。当这种情况反复发生时,最终导致了
max_prepared_stmt_count
超标投诉。此修复可确保当语句的缓存条目替换旧语句时,旧语句会立即关闭。(缺陷 #20066806,缺陷 #74932)