Documentation Home
MySQL 连接器/J 8.0 发行说明  /  MySQL Connector/J 8.0.8 的变化(2017-09-28,发展里程碑)

MySQL Connector/J 8.0.8 的变化(2017-09-28,发展里程碑)

版本 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 对象以及定义和的实例的 PersistenceHandlerPasswordHandler

    有关详细信息,请参阅MySQL Connector/J X DevAPI 参考

  • X DevAPI:添加了 一个新的连接属性,xdevapi.auth用于指定使用 X 协议的连接的身份验证机制。允许的值为 MYSQL41PLAINEXTERNAL有关详细信息,请参阅配置属性中新属性的条目 。

  • X DevAPI: 为了支持方法的 行锁 ,已经使用以下方法扩展 和 find()FindStatementSelecStatement

    • 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 现在支持 INandNOT 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

  • 现在支持 从 MySQLTIME数据到 的转换。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 的主机列表中服务器的子集)按照它们列出的顺序进行联系,直到服务器可用或直到服务器列表耗尽,此时点随机负载平衡策略用于未列出的主机serverAffinityOrderloadBalancingStrategy有关详细信息, 请参阅配置属性serverAffinityOrder中 的描述。(缺陷号 20182108)

修正错误

  • 重要变化: 随着 MySQL Server 8.0.3 的变化,系统变量tx_isolationtx_read_only已被替换 transaction_isolationtransaction_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中,参数resultSetTyperesultSetConcurrency调用 Connection.preparedStatement()被交换了。(漏洞 #25874048,漏洞 #85885)

  • 一些 JDBC 代理对象缺少对equals()方法的正确处理,因此即使将这些代理对象之一与其自身进行比较也会 equals()产生错误。equals()此补丁在所有相关代理中引入了对该方法的正确处理。(缺陷 #21931572,缺陷 #78313)

  • 当缓存原始语句时再次准备相同的语句时,服务器端准备好的语句不会关闭。这是由新语句静默替换旧语句的缓存条目引起的。当这种情况反复发生时,最终导致了 max_prepared_stmt_count超标投诉。此修复可确保当语句的缓存条目替换旧语句时,旧语句会立即关闭。(缺陷 #20066806,缺陷 #74932)