MySQL Connector/J 5.0.5更新(2007-03-02)

添加或更改的功能

  • Usage Advisor现在将对具有大量行的结果集发出警告。方法配置触发值resultSetSizeThreshold参数,默认值为100。

  • rewriteBatchedStatements特性现在可以用于服务器端预处理语句。

  • 重要的变化:由于服务器端预处理语句的使用存在一些问题,Connector/J 5.0.5默认禁用了它们的使用。服务器端预处理语句的禁用不会以任何方式影响连接器的操作。

    要启用服务器端准备语句,将以下配置属性添加到连接器字符串中:

    useServerPrepStmts = true

    此属性的默认值为(也就是说,Connector/J不使用服务器端预处理语句)。

  • 提高速度datetime解析来自普通或非服务器端准备语句的resultset。可以启用旧的实现useFastDateParsing = false作为配置参数。

  • Usage Advisor现在检测空结果集,不报告在这些空集中未引用的列。

  • 修正了XA命令发送到服务器的日志记录,现在可以使用它进行配置logXaCommands属性(默认为).

  • 增加配置属性localSocketAddress,这是用于显式配置接口的主机名或IP地址,驱动程序将在连接时将TCP/IP连接的客户端绑定到该接口。

  • 我们添加了一个新的配置选项treatUtilDateAsTimestamp,即默认情况下,因为(1)我们已经有了将java.util.Date作为java.sql.Timestamp的特定行为,因为它对许多人很有用;(2)JDBC-post-4.0驱动程序很可能需要这种行为。

错误修复

  • 连接属性socketFactory没有使用正确命名的突变器/访问器公开,导致使用JavaBean命名约定设置属性的数据源实现无法设置属性(在SJAS的情况下,在尝试设置此参数时无声地失败)。(错误# 26326)

  • 超时的查询执行并不总是抛出MySQLTimeoutException.(错误# 25836)

  • 存储java.util.Date对象中的期间不能正确序列化列setObject.(错误# 25787)

  • 用于Statement.setQueryTimeout ()创建每个连接,而不是每个虚拟机,导致内存泄漏。(错误# 25514)

  • EscapeProcessor被多个反斜杠弄糊涂了。现在,对于大多数转义序列,我们将语法错误的责任推给服务器。(错误# 25399)

  • INOUT参数callablestatement得到双重转义。(错误# 25379)

  • 当使用rewriteBatchedStatements连接选项PreparedState.executeBatch ()会发生内部内存泄漏。(错误# 25073)

  • 修正了字段级元数据的问题DatabaseMetaData当使用INFORMATION_SCHEMA没有对当前连接的引用,有时会导致在使用自省时出现空指针异常(NPEs)ResultSetMetaData.(错误# 25073)

  • StringUtils.indexOfIgnoreCaseRespectQuotes ()在目标的第一个字符上不区分大小写。此错误也影响到rewriteBatchedStatements的语句没有使用大写时的功能条款。(错误# 25047)

  • 客户端准备语句解析器被内嵌注释弄糊涂了/ * * /因此不能重写批处理语句或在使用时可靠地检测语句的类型。(错误# 25025)

  • 结果集来自更新作为多语句查询一部分的语句将导致SQLException异常error,“Result is from UPDATE”。(错误# 25009)

  • 指定us - ascii因为连接到MySQL 4.1或更新服务器的字符集不能正确映射。(错误# 24840)

  • 使用DatabaseMetaData.getSQLKeywords ()不会返回当前MySQL版本的所有保留关键字。当前的实现返回MySQL 5.1的保留字列表,并且不区分版本。(错误# 24794)

  • 调用Statement.cancel ()可能导致空指针异常(NPE)。(错误# 24721)

  • 使用setFetchSize ()准备休息显示和其他命令。(错误# 24360)

  • 日历和时区现在在需要时被惰性实例化。(错误# 24351)

  • 使用DATETIME列会导致时移useServerPrepStmts是真的。这是由于与服务器端准备语句相比,使用客户端时的行为不同useJDBCCompliantTimezoneShift选择。现在,如果通过设置从服务器端准备语句移动到客户端准备语句,则可以修复此问题useSSPSCompatibleTimezoneShift真正的,因为驱动程序无法判断这是一个从未使用过服务器端准备语句的新部署,还是一个从服务器端准备语句切换到客户端准备语句的现有部署。(错误# 24344)

  • 现在,当服务器没有返回足够的信息来确定存储过程/函数参数类型时,Connector/J将返回更好的错误消息。(错误# 24065)

  • 当使用特定字符集连接MySQL服务器时,会出现连接错误。一些排序规则/字符集报告为“未知”(特别是美国中央情报局现有字符集的变体),并且无法覆盖检测到的服务器字符集。(错误# 23645)

  • 之间的矛盾getSchemas而且INFORMATION_SCHEMA.(错误# 23304)

  • DatabaseMetaData.getSchemas ()不返回TABLE_CATALOG列。(错误# 23303)

  • 当使用格式不正确的JDBC连接URL时,NonRegisteringDriver.getPropertyInfo方法将抛出空指针异常(NPE)。(错误# 22628)

  • 抛出的一些异常StandardSocketFactory被不必要地包装,掩盖了它们的真正原因,特别是在使用套接字超时时。(错误# 21480)

  • 当使用服务器端准备语句和时间戳列时,值将被错误地填充(使用纳秒,而不是微秒)。(错误# 21438)

  • 当使用服务器端预处理语句时,驱动程序将以纳秒而不是毫秒的方式向服务器发送时间戳。(错误# 21438)

  • ParameterMetaData抛出NullPointerException当准备好的SQL有语法错误时。添加generateSimpleParameterMetadata属性,当将其设置为真正的将生成元数据VARCHAR对于每个参数(默认为,如果该语句没有实际可用的参数元数据,则会导致抛出异常)。(错误# 21267)

  • Connector/J JAR包中的清单文件不正确。(Bug #15641, Bug #11745464)

  • 修正了一个问题xadatasource来不能绑定到JNDI,因为DataSourceFactory不知道如何创建它们的实例。

其他的变化

  • 避免在JVM类库中使用静态同步代码来处理默认时区。

  • 初始字符集配置的性能增强,如果服务器上的当前值与所需值不匹配,驱动程序只会发送配置连接字符集会话变量所需的命令。

  • 重新编写存储过程参数解析器,使其更加健壮。驱动程序不再需要开始在存储过程定义中,但确实有要求,如果存储函数的"returns"子句后面直接以一个标签开始,则该标签不是带引号的标识符。

  • 将超时期间遇到的异常抛出给线程调用Statement.execute * (),而不是RuntimeException

  • 更改缓存结果集元数据(当使用cacheResultSetMetadata = true)每个连接缓存,而不是之前实现的每个语句缓存。

  • 回到单字节字符集的内部字符转换例程,因为JVM内部的字符转换比我们的内部实现使用更多的CPU时间。

  • 提取外键信息时显示创建表DatabaseMetaData,忽略与表缺失相关的异常(这可能发生在交叉引用或导入键请求中,因为先生成表列表,然后再迭代)。

  • 修复了一些缓存元数据使用时的空指针异常(NPEs)UpdatableResultSets

  • localSocketAddress属性的实例时考虑CommunicationsException当基础异常为java.net.BindException,这样就会给出一个更友好的错误消息,并进行一些内部诊断。

  • 固定的情况下ServerPreparedStatements我们没有使用缓存的元数据cacheResultSetMetadata = true是使用。

  • 使用一个java.util.TreeMap将列名映射到的序号索引ResultSet.findColumn ()而不是HashMap。这使我们能够进行不区分大小写的查找(JDBC规范所要求的),而不需要借助许多瞬态对象实例来支持此需求HashMap使用大小写调整键或大小写不敏感键。(在最坏的情况下,查找1000列的结果集,treemap的时间大约是HashMap的一半,但是在正常的应用程序中,使用treemap可以在瞬变对象实例创建方面减少许多数量级,从而在稍后的垃圾收集中减少CPU使用)。

  • 在使用缓存的元数据时,跳过来自服务器的字段级元数据包,而不是读取它们并在不创建的情况下丢弃它们com.mysql.jdbc.Field实例。