Release Notes for the MariaDB Connector/J 1.5 series
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 20 Mar 2017
MariaDB Connector/J 1.5.9 is a Stable (GA) release.
For an overview of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-423 : Permit having the MySQL driver and MariaDB driver in the same classpath
CONJ-431 : multi-values queries return only one generated key
CONJ-437 : ResultSet.getString on field with ZEROFILL doesn't have the '0' leading char when using binary protocol
CONJ-435 : avoid "All pipe instances are busy" exception on multiple connections to the same named pipe
CONJ-446 : ResultSet first() throws an exception for scroll type if TYPE_FORWARD_ONLY
, only when streaming
CONJ-440 : handle very big blob (1Gb)
CONJ-434 : 1.5.8 regression : ResultSet returns duplicate entries when using fetchsize
CONJ-429 : ResultSet.getDouble/getFloat may throw a NumberFormatException
CONJ-438 : using option rewriteBatchedStatements
permits rewrite when a query has a column/table that contains the 'select' keyword
CONJ-212 : Implement password encoding charset option to permit connecting using a password created with a connection that had a different charset
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 15 Feb 2017
MariaDB Connector/J 1.5.8 is a Stable (GA) release.
For an overview of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-424 : getGeneratedKeys() on table without generated key failed on second execution
CONJ-412 : Metadata take in account tinyInt1isBit in method columnTypeClause
CONJ-418 : ResultSet.last() isLast() afterLast() and isAfterLast() correction when streaming
CONJ-415 : ResultSet.absolute() should not always return true
CONJ-392 : Aurora cluster endpoint detection fails when time_zone doesn't match system_time_zone
CONJ-425 : CallableStatement getObject class according to java.sql.Types value
CONJ-426 : Allow executeBatch to be interrupted
CONJ-420 : High CPU usage against Aurora after 2 hours inactivity
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 13 Jan 2017
MariaDB Connector/J 1.5.7 is a Stable (GA) release.
For an overview of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-407 : handling failover when packet > max_allowed_packet reset the connection state.
CONJ-403 : possible NPE on ResultSet.close() correction
CONJ-405 : Calendar instance not cleared before being used in ResultSet.getTimestamp
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 22 Dec 2016
MariaDB Connector/J 1.5.6 is a Stable (GA) release.
For an overview of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-399 : resultSet getLong() for BIGINT column fails if value is Long.MIN_VALUE in Text protocol
CONJ-395 : Aurora does not randomise selection of read replicas
CONJ-392 : Aurora cluster endpoint detection timezone issue
CONJ-394 : mysql_native_password plugin authentication fail when default-auth set
CONJ-388 : handle timestamp '0000-00-00 00:00:00' getString()
CONJ-391 : Use SELECT in place of SHOW command on connection
CONJ-396 : revised implementation for handling multiple resultSet correctly for a unique command (was failing if more than 2)
CONJ-380 : continous integration now test against maxscale
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 9 Nov 2016
MariaDB Connector/J 1.5.5 is a Stable (GA) release.
For an overview of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-386 : Disabling useBatchMultiSend option for Aurora, since can hang connection.
CONJ-385 : Store procedure with resultSet get wrong getUpdateCount() value (0 in place of -1)
CONJ-383 : permit OldAuthSwitchRequest protocol (compatibility with 5.5 server using plugin)
CONJ-382 : Client sockets remain when server close socket on connection (when server maximum connections number has been reached)
CONJ-381 : Metadata getProcedureColumns precision's information corrected for date/timestamp/datetime
CONJ-379 : Metadata TINYTEXT type return Types.LONGVARCHAR instead of Types.VARCHAR
CONJ-376 : Maxscale compatibility : Permit protocol compression only if server permit it
CONJ-375 : Load data infile with large files fails with OutOfMemoryError correction
CONJ-370 : use KeyStore default property when not using keyStore option
CONJ-369 : Encoding on clob column when useServerPrepStmts=true correction
CONJ-362 : fix a possible race condition MariaDbPooledConnection
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 13 Oct 2016
MariaDB Connector/J 1.5.4 is a Stable (GA) release.
For an overview of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-363 : Connection.getClientInfo implementation correction to follow JDBC rules
CONJ-361 : PrepareStatement setString() with empty string correction.
CONJ-360 : replacing ManagementFactory.getRuntimeMXBean() that cause Connection timeout issue due to DNS lookup depending on environment
CONJ-359 : Metadata getColumns(...) resultSet doesnt have "IS_GENERATEDCOLUMN" info
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 4 Oct 2016
MariaDB Connector/J 1.5.3 is a Stable (GA) release.
For a description of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a bug-fix release.
CONJ-358 : Permit using private key with password that differs from keyStore password
CONJ-356 : secure connection : use KeyStore private key and associate public keys certificates only
CONJ-342 : Empty clientCertificateKeyStoreUrl option correction
CONJ-353 : IBM jdk compatibility issue
CONJ-354 : Streaming issue when using procedures in PrepareStatement/Statement
CONJ-345 : Regression with using COLLATE keyword in PrepareStatement query
CONJ-352 : metadata correction on getPrecision() for numeric fields
CONJ-350 : make prepare fallback to client prepare if query cannot be prepare
New Option :
Some options which names where confusing have been renamed (the old names still works):
clientCertificateKeyStoreUrl
keyStore
like system property "javax.net.ssl.keyStore"
clientCertificateKeyStorePassword
keyStorePassword
like system property "javax.net.ssl.keyStorePassword"
trustCertificateKeyStoreUrl
trustStore
like system property "javax.net.ssl.trustStore"
trustCertificateKeyStorePassword
trustStorePassword
like system property "javax.net.ssl.trustStorePassword"
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 1 Sep 2016
MariaDB Connector/J 1.5.2 is a Stable (GA) release.
For a description of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a feature release.
kerberos implementation on windows has java limitations. Main limitations are :
need a windows registry entry (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters\AllowTGTSessionKey) so windows shared current ticket to java.
java kinit must be executed to create a Ticket.
restriction when client with local admin rights
See see openJDK issue for more informations
Kerberos GSSAPI implementation on windows in now based on Waffle that support windows SSPI based on JNA. If waffle-jna (and dependencies) is on classpath, native implementation will automatically be used.
This removes all those limitations.
Driver before version 1.5 support only TLSv1. Default supported protocol are now TLSv1 and TLSv1.1, other protocols can be activated by options.
MariaDB and MySQL community server permit TLSv1 and TLSv1.1. MariaDB server from version 10.0.15 is using the openSSL library permitting TLSv1.2 (>= 5.5.41 for the 5.5 branch).YaSSL doesn't support TLSv1.2, so if MariaDB server is build from sources with YaSSL, only TLSv1 and TLSv1.1 will be available, even for versions > 10.0.15
TLSv1.2 can be enabled by setting option enabledSslProtocolSuites
to values "TLSv1, TLSv1.1, TLSv1.2"
.
A new option enabledSslCipherSuites
permits setting a specific cipher.
New Options :
enabledSslProtocolSuites
Force TLS/SSL protocol to a specific set of TLS versions (comma separated list). Example : "TLSv1, TLSv1.1, TLSv1.2" Default: TLSv1, TLSv1.1. Since 1.5.0
enabledSslCipherSuites
Force TLS/SSL cipher (comma separated list). Example : "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" Default: use JRE ciphers. Since 1.5.0
Different performance improvements have been implemented :
Using PreparedStatement on client side uses a simple query parser to identify query parameters. This parsing was taking up to 7% of query time, reduced to 3%.
Better UTF-8 decoding avoiding memory consumption and gaining 1-2% query time for big String.
client parsing optimization : rewriteBatchedStatements (insert into ab (i) values (1)
and insert into ab (i) values (2)
rewritten as insert into ab (i) values (1), (2)
)
is now 19% faster (Depending on queries 40-50% of CPU time was spent testing that the buffer size was big enough to contain the query)
there was some memory wastage when a query returned a big resultset (> 10kb), slowing the query
and many more
CONJ-320 Batch improvement : Send X command without reading results, and read those X results asynchronously. Basically that permits avoiding a lot of 'ping-pong' between driver and server.
New Options :
useBatchMultiSend
PreparedStatement.executeBatch() will send many QUERY before reading result packets.Default: true. Since 1.5.0
useBatchMultiSendNumber
When using useBatchMultiSend, indicate maximum query that can be send at a time.Default: 100. Since 1.5.0
When using MySQL/MariaDB prepared statements, there are 3 exchanges with server :
PREPARE - Prepares statement for execution.
EXECUTE - Executes a prepared statement preparing by a PREPARE statement.
DEALLOCATE PREPARE - Releases a prepared statement.
See Server prepare documentation for more information.
Since MariaDB 10.2.2, the last PREPARE statement id can be identified with value "-1". The driver uses this functionality to PREPARE and EXECUTE in one client-server round-trip.
Client logging can be enabled, permitting logging of query information, execution time and different failover information. This implementation needs the standard SLF4J dependency.
New Options :
log
Enable log information. require Slf4j version > 1.4 dependency.Default: false. Since 1.5.0
maxQuerySizeToLog
Only the first characters corresponding to this options size will be displayed in logsDefault: 1024. Since 1.5.0
slowQueryThresholdNanos
Will log query with execution time superior to this value (if defined )Default: 1024. Since 1.5.0
profileSql
log connection id, query and execution time.log example : 2016-07-29 23:28:50 [main] INFO org.mariadb.jdbc.MariaDbStatement - Query - conn:10295 - 0,309 ms - "select * from TABLE"Default: false. Since 1.5.0
(CONJ-325)
Aurora now auto discovers nodes from the cluster endpoint.
Aurora endpoints
Every aurora instance has a specific endpoint, i.e. a URL that identifies the
host. These endpoints look like xxx.yyy.zzz.rds.amazonaws.com
.
There is another endpoint named "cluster endpoint" (formatxxx.cluster-yyy.zzz.rds.amazonaws.com
) which is assigned to the current
master instance and will change when a new master is promoted.
In previous versions, cluster endpoint use was discouraged, since, when a failover occurs, this cluster endpoint can point for a limited time to a host that is no longer the current master. The old recommendation was to list all specific end-points, like:
jdbc:mysql:aurora://a.yyy.zzz.rds.amazonaws.com.com,b.yyy.zzz.rds.amazonaws.com.com/db
This kind of URL string will still work, but now the recommended URL string only has to use the cluster endpoint:
jdbc:mysql:aurora://xxx.cluster-yyy.zzz.rds.amazonaws.com/db
The driver will automatically discover master and slaves of this cluster from the current cluster endpoint during connection time. This permits adding new replicas to the cluster instance that will be discovered without changing the driver configuration.
This discovery appends at connection time, so if you are using a pool framework, check if this framework has a property that controls the maximum lifetime of a connection in the pool, and set a value to avoid infinite lifetime. When this lifetime is reached, the pool will discarded for the current connection, and will create a new one (if needed). New connections will use the new replicas.
(If connections are never discarded, new replicas will begin to be used only when a failover occurs.)
CONJ-305 LOAD DATA INFILE The fastest way to load most data is using the query LOAD DATA INFILE. The problem is using "LOAD DATA LOCAL INFILE" (ie : loading a file from client), may be a security problem :
A "man in the middle" proxy server can change the actual file asked from server so client will send a Local file to this proxy.
If someone has can execute a query from the client, he can have access to any file on client (according to the rights of the user running the client process).
See the load-data-infile documentation for more information.
Interceptors can now filter the LOAD DATA LOCAL INFILE query's file location to validate the path and file name. Those interceptors:
Must implement interface org.mariadb.jdbc.LocalInfileInterceptor
.
Use ServiceLoader implementation, so interceptors classes must be listed in file META-INF/services/org.mariadb.jdbc.LocalInfileInterceptor.
Example:
package org.project;
public class LocalInfileInterceptorImpl implements LocalInfileInterceptor {
@Override
public boolean validate(String fileName) {
File file = new File(fileName);
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.substring(0,absolutePath.lastIndexOf(File.separator));
return filePath.equals("/var/tmp/exchanges");
}
}
file META-INF/services/org.mariadb.jdbc.LocalInfileInterceptor must exist with content org.project.LocalInfileInterceptorImpl
.
You can get rid of defining the META-INF/services file using the google auto-service framework, which allows using the annotation @AutoService(LocalInfileInterceptor.class)
that will register the implementation as a service automatically.
Using the previous example:
@AutoService(LocalInfileInterceptor.class)
public class LocalInfileInterceptorImpl implements LocalInfileInterceptor {
@Override
public boolean validate(String fileName) {
File file = new File(fileName);
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.substring(0,absolutePath.lastIndexOf(File.separator));
return filePath.equals("/var/tmp/exchanges");
}
}
CONJ-260 : Add jdbc nString, nCharacterStream, nClob implementation
CONJ-316 : Wrong Exception thrown for ScrollType TYPE_SCROLL_INSENSITIVE
CONJ-298 : Error on Callable function exception when no parameter and space before parenthesis
CONJ-314 : Permit using Call with Statement / Prepare Statement
CONJ-331 : clearWarnings() now throw exception on closed connection
CONJ-299 : PreparedStatement.setObject(Type.BIT, "1") registered as true.
CONJ-293 : permit named pipe connection without host
CONJ-333 : ResultSet.getString() of PreparedStatement return NULL When TIME column value=00:00:00
RC corrections
CONJ-335 : Pool connection may fail to connect with good user
CONJ-332 : option enabledSslCipherSuites rely on java supportedCipherSuites (replacing enabledCipherSuites)
UTF-8 conversion correction (last character was not well encode if high surrogate)
For a list of all changes made in this release, with links to detailed information on each push, see the Connector/J 1.5.x changelogs:
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 16 Aug 2016
MariaDB Connector/J 1.5.1 is a Release candidate (RC) release.
For a description of MariaDB Connector/J see theAbout MariaDB Connector/J page
Aurora host auto-discovery (CONJ-325)
Aurora now auto discovers nodes from the cluster endpoint.
Aurora endpoints
Every aurora instance has a specific endpoint, i.e. a URL that identifies the
host. These endpoints look like xxx.yyy.zzz.rds.amazonaws.com
.
There is another endpoint named "cluster endpoint" (formatxxx.cluster-yyy.zzz.rds.amazonaws.com
) which is assigned to the current
master instance and will change when a new master is promoted.
In previous versions, cluster endpoint use was discouraged, since, when a failover occurs, this cluster endpoint can point for a limited time to a host that is no longer the current master. Old recommendation was to list all specific end-points, like:
jdbc:mysql:aurora://a.yyy.zzz.rds.amazonaws.com.com,b.yyy.zzz.rds.amazonaws.com.com/db
This kind of URL string will still work, but now the recommended URL string has to use only the cluster endpoint:
jdbc:mysql:aurora://xxx.cluster-yyy.zzz.rds.amazonaws.com/db
The driver will automatically discover master and slaves of this cluster from the current cluster endpoint during connection time. This permits adding new replicas to the cluster instance that will be discovered without changing the driver configuration.
This discovery appends at connection time, so if you are using a pool framework, check if this framework has a property that controls the maximum lifetime of a connection in the pool, and set a value to avoid infinite lifetime. When this lifetime is reached, pool will discarded for the current connection, and will create a new one (if needed). New connections will use the new replicas.
(If connections are never discarded, new replicas will begin to be used only when a failover occurs.)
For a list of all changes made in this release, with links to detailed information on each push, see thechangelog.
This page is: Copyright © 2025 MariaDB. All rights reserved.
The most recent Stable (GA) release of MariaDB Connector/Java is:
DownloadRelease NotesChangelogConnector/J Overview
Release date: 1 Aug 2016
MariaDB Connector/J 1.5.0 is a Release candidate (RC) release.
For a description of MariaDB Connector/J see theAbout MariaDB Connector/J page
This version is a feature release.
kerberos implementation on windows has java limitations. Main limitations are :
need a windows registry entry (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters\AllowTGTSessionKey) so windows shared current ticket to java.
java kinit must be executed to create a Ticket.
restriction when client with local admin rights
See see openJDK issue for more informations
Kerberos GSSAPI implementation on windows in now based on Waffle that support windows SSPI based on JNA. If waffle-jna (and dependencies) is on classpath, native implementation will automatically be used.
This removes all those limitations.
Driver before version 1.5 support only TLSv1. Default supported protocol are now TLSv1 and TLSv1.1, other protocols can be activated by options.
MariaDB and MySQL community server permit TLSv1 and TLSv1.1. MariaDB server from version 10.0.15 is using the openSSL library permitting TLSv1.2 (>= 5.5.41 for the 5.5 branch).YaSSL doesn't support TLSv1.2, so if MariaDB server is build from sources with YaSSL, only TLSv1 and TLSv1.1 will be available, even for version > 10.0.15
TLSv1.2 can be enabled by setting option enabledSslProtocolSuites
to values "TLSv1, TLSv1.1, TLSv1.2"
.
A new option enabledSslCipherSuites
permit to set specific cipher.
New Options :
enabledSslProtocolSuites
Force TLS/SSL protocol to a specific set of TLS versions (comma separated list). Example : "TLSv1, TLSv1.1, TLSv1.2"Default: TLSv1, TLSv1.1. Since 1.5.0
enabledSslCipherSuites
Force TLS/SSL cipher (comma separated list). Example : "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"Default: use JRE ciphers. Since 1.5.0
Different performance improvement have been done :
Using PreparedStatement on client side use a simple query parser to identify query parameters. This parsing was taking up to 7% of query time, reduced to 3%.
Better UTF-8 decoding avoiding memory consumption and gain 1-2% query time for big String.
client parsing optimization : rewriteBatchedStatements (insert into ab (i) values (1) and insert into ab (i) values (2) rewritten as insert into ab (i) values (1), (2)) is now 19% faster (Depending on queries 40-50% of CPU time was spend testing that buffer size is big enough to contain query).
there was some memory wastage when query return big resultset (> 10kb), slowing query.
and a lot more
CONJ-320 Batch improvement : Send X command without reading results, and read those X results asynchronously . Basically that permit to avoid a lot of 'ping-pong' between driver and server.
New Options :
useBatchMultiSend
PreparedStatement.executeBatch() will send many QUERY before reading result packets.Default: true. Since 1.5.0
useBatchMultiSendNumber
When using useBatchMultiSend, indicate maximum query that can be send at a time.Default: 100. Since 1.5.0
When using MySQL/MariaDB prepared statement, there will be 3 exchanges with server :
PREPARE - Prepares statement for execution.
EXECUTE - Executes a prepared statement preparing by a PREPARE statement.
DEALLOCATE PREPARE - Releases a prepared statement.
See Server prepare documentation for more information.
Since MariaDB 10.2.2, last PREPARE statement id can be identified with value "-1". Driver is using this functionality to PREPARE and EXECUTE in one client-server round-trip.
Client logging can be enable, permitting to log query information, execution time and different failover informations. This implementation need the standard SLF4J dependency.
New Options :
log
Enable log information. require Slf4j version > 1.4 dependency.Default: false. Since 1.5.0
maxQuerySizeToLog
Only the first characters corresponding to this options size will be displayed in logsDefault: 1024. Since 1.5.0
slowQueryThresholdNanos
Will log query with execution time superior to this value (if defined )Default: 1024. Since 1.5.0
profileSql
log connection id, query and execution time.log example : 2016-07-29 23:28:50 [main] INFO org.mariadb.jdbc.MariaDbStatement - Query - conn:10295 - 0,309 ms - "select * from TABLE"Default: false. Since 1.5.0
CONJ-305 LOAD DATA INFILE The fastest way to load many datas is using query LOAD DATA INFILE. Problem is using "LOAD DATA LOCAL INFILE" (ie : loading a file from client), may be a security problem :
A "man in the middle" proxy server can change the actual file asked from server so client will send a Local file to this proxy.
If someone has can execute query from client, he can have access to any file on client (according to the rights of the user running the client process).
See load-data-infile documentation for more information.
Interceptors can now filter LOAD DATA LOCAL INFILE query's file location to validate path / file name. Those interceptors:
Must implement interface org.mariadb.jdbc.LocalInfileInterceptor
.
Use ServiceLoader implementation, so interceptors classes must be listed in file META-INF/services/org.mariadb.jdbc.LocalInfileInterceptor.
Example:
package org.project;
public class LocalInfileInterceptorImpl implements LocalInfileInterceptor {
@Override
public boolean validate(String fileName) {
File file = new File(fileName);
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.substring(0,absolutePath.lastIndexOf(File.separator));
return filePath.equals("/var/tmp/exchanges");
}
}
file META-INF/services/org.mariadb.jdbc.LocalInfileInterceptor must exist with content org.project.LocalInfileInterceptorImpl
.
You can get ride of defining the META-INF/services file using google auto-service framework, permitting to use annotation @AutoService(LocalInfileInterceptor.class)
that will register the implementation as a service automatically.
Using the previous example:
@AutoService(LocalInfileInterceptor.class)
public class LocalInfileInterceptorImpl implements LocalInfileInterceptor {
@Override
public boolean validate(String fileName) {
File file = new File(fileName);
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.substring(0,absolutePath.lastIndexOf(File.separator));
return filePath.equals("/var/tmp/exchanges");
}
}
CONJ-260 : Add jdbc nString, nCharacterStream, nClob implementation
CONJ-316 : Wrong Exception thrown for ScrollType TYPE_SCROLL_INSENSITIVE
CONJ-298 : Error on Callable function exception when no parameter and space before parenthesis
CONJ-314 : Permit using Call with Statement / Prepare Statement
For a list of all changes made in this release, with links to detailed information on each push, see thechangelog.
This page is: Copyright © 2025 MariaDB. All rights reserved.