オリジナル版:http://lists.mysql.com/java/9222
バージョン5.1版での製品版保守リリースであるMySQL Connector/J 5.1.7が リリースされました。Connector/Jは、MySQL用のタイプ4のpure-Java JDBCドライバです。
バージョン5.1.7は、MySQL-4.1、MySQL-5.0、MySQL-5.1 RC、MySQL-6.0開発リリースを含んだいくつかのMySQLのバージョンでの使用にふさわしいリリースです。
バージョン5.1.7は、http://dev.mysql.com/downloads/connector/j/5.1.htmlおよびミラーサイトのConnector/Jダウンロードページからソースおよびバイナリ形式で入手可能です。(すべてのミラーサイトが現在において最新であるとは限らないかもしれないことに注意してください。あるミラーサイトでこのバージョンを見つけることができない場合は、再度確認を行うか、あるいは別のダウンロード・サイトを選択してください。)
いつものことですが、アプリケーションに影響を及ぼす動作変更を把握するには、アップグレードの前に、マニュアルの変更ログ(http://dev.mysql.com/doc/refman/5.1/en/cj-news.html)と"Upgrading"の節(http://dev.mysql.com/doc/refman/5.1/en/cj-upgrading.html)をチェックするようお勧めします。
バグレポート、バグ修正、パッチ等の情報をお待ちしておりますので、以下のページをご利用ください。
http://forge.mysql.com/wiki/Contributing
以下は、Connector/J 5.1.7の変更情報です。
MySQL Connector/J 5.1.7 includes the following changes targeted at
scalability and performance:
MySQL Connector/J 5.1.7 includes the following changes targeted at
scalability and performance:
- FixedBUG#33861- Added global blacklist for
LoadBalancingConnectionProxy and implemented in RandomBalanceStrategy
and BestResponseTimeBalanceStrategy. Added new property,
"loadBalanceBlacklistTimeout", to control how long a server lives in
the global blacklist. (Thanks to Todd Farmer in the support team for
implementing this feature, and for Shawn Green in the support team for
testing it!)
- FixedBUG#38782- Possible IndexOutOfBoundsException in random load
balancing strategy.
- FixedBUG#39784- invalidateCurrentConnection() does not manage
global blacklist when handling connection exceptions.
- FixedBUG#40031- Adding support for CallableStatement.execute() to
call stored procedures that are defined as NO SQL or SQL READ DATA
when failed over to a read-only slave with replication driver.
- Use socket timeouts for JDBC-4.0's Connection.isValid(int timeout)
instead of timer tasks, for scalability. As a side effect internally,
any communications with the database can use a timeout different than
the configured timeout, but this isn't currently used.
- Added connection property "useLocalTransactionState" which
configures if the driver use the in-transaction state provided by the
MySQL protocol to determine if a commit() or rollback() should
actually be sent to the database. (disabled by default).
- FixedBUG#39962- ResultSet.findColumn() is slow for applications
that call it too often (we're looking at -you- Hibernate). We're using
TreeMaps to get case-insensitive comparisons (required for JDBC
compliance), but they can be slower than hash maps, so using the
approach Alex Burgel points out in this bug seems to help.
- FixedBUG#39611- ReplicationConnection never sends queries to last
host in slave list.
- FixedBUG#35660- Calling equals() on connections created with
"jdbc:mysql:loadbalance:" URLs did not have the same behavior as
"plain" connections. The behavior we use is the implementation in
java.lang.Object, load-balanced connections just happened to be using
a java.lang.reflect.Proxy which required some custom behavior in
equals() to make it work the same as "plain" connections.
Note that there is no *specified* equals contract for JDBC
connections in the JDBC specification itself, but the test makes sure
that our implementation is at least consistent.
As well as the following general bug fixes:
- FixedBUG#35170- ResultSet.isAfterLast() doesn't work with for
streaming result sets.
- FixedBUG#35199- Parse error for metadata in stored function.
- FixedBUG#35415- When result set is from views without access to
underlying columns and is opened with CONCUR_UPDATABLE, don't throw
SQLExceptions when checking updatability due to access permissions,
instead return CONCUR_READONLY from getConcurrency.
- FixedBUG#35666- NullPointerException when using
"logSlowQueries=true" with server-side prepared statements enabled.
- FixedBUG#35810- Properties set in URLs and then passed to
DataSources via setUrl() did not take effect in certain
circumstances. This also fixes related bugsBUG#13261and BUG#35753.
- FixedBUG#36051- ResultSet.getTime() won't accept value of '24'
for hours component of a java.sql.Time.
- FixedBUG#36830- DBMD.getColumns() doesn't return correct
COLUMN_SIZE for SET columns. The logic wasn't accounting for the ","s
in the column size.
- FixedBUG#35610,BUG#35150- ResultSet.findColumn() and
ResultSet.get...(String) doesn't allow column names to be used, and
isn't congruent with ResultSetMetadata.getColumnName().
By default, we follow the JDBC Specification here, in that
the 4.0 behavior is correct. Calling programs should use
ResultSetMetaData.getColumnLabel() to dynamically determine the
correct "name" to pass to ResultSet.findColumn() or ResultSet.get...
(String) whether or not the query specifies an alias via "AS" for the
column. ResultSetMetaData.getColumnName() will return the actual name
of the column, if it exists, and this name can *not* be used as input
to ResultSet.findColumn() or ResultSet.get...(String).
The JDBC-3.0 (and earlier) specification has a bug, but you can get
the buggy behavior (allowing column names *and* labels to be used for
ResultSet.findColumn() and get...(String)) by setting
"useColumnNamesInFindColumn" to "true".
- FixedBUG#35489- Prepared statements from pooled
connections cause NPE when closed() under JDBC-4.0.
- The number and position of columns for "SHOW INNODB STATUS" changed
in MySQL-5.1, which caused the
"includeInnodbStatusInDeadlockExceptions" feature to not show data
about the deadlock.
- Implemented support of INFORMATION_SCHEMA for
DatabaseMetadata.getTables() (views there are available as "SYSTEM
TABLE"), and thus also made INFORMATION_SCHEMA tables available via
DatabaseMetadata.getColumns().
- FixedBUG#39352, "INSERT ... ON DUPLICATE KEY UPDATE" doesn't
return "0" for un-affected rows. This requires the driver to not send
the "CLIENT_FOUND_ROWS" flag to the server when it connects if the
connection property "useAffectedRows" is set to "true", which breaks
JDBC-compliance, but currently there is no other way to get correct
return values from the server.
- FixedBUG#38747- ResultSets in "streaming" mode throw an exception
when closed when the connection is set as "read-only".
- FixedBUG#37570- Can't use non-latin1 passwords. Added connection
property "passwordCharacterEncoding". Leaving this set to the default
value (null), uses the platform character set, which works for
ISO8859_1 (i.e. "latin1") passwords. For passwords in other character
encodings, the encoding will have to be specified with this property,
as it's not possible for the driver to auto-detect this.
- FixedBUG#39911- We don't retrieve nanos correctly when -parsing-
a string for a TIMESTAMP. MySQL itself doesn't support micros or
nanos in timestamp values, but if they're stored as strings,
historically we try and parse the nanos portion as well.
Unfortunately we -interpreted- them as micros. This fix includes
correcting that behavior, and setting the milliseconds portion of such
TIMESTAMPs to a correct value as well.
- FixedBUG#39956- Statement.getGeneratedKeys() doesn't respect the
'auto_increment_increment' value. We now grab the *session-scoped*
value, and use that. Beware that using "cacheServerConfig=true" will
cause us to cache this value, so new connections won't see changes
that are applied via something like "init-sql".
- FixedBUG#34185- Statement.getGeneratedKeys() does not raise
exception when statement was not created with
Statement.RETURN_GENERATED_KEYS flags.
- Using autoGenerateTestcaseScript=true now logs all statements,
regardless or not if they cause errors when processed by MySQL. A
"clock" value (millis since epoch) was added in the comment that is
pre-pended with the idea that it can then be used when post-processing
output to sequence things correctly for a multi-threaded testcase, or
to replay the test case with the correct think times.