Download | Release Notes | Changelog |
Release date: 15 Nov 2022
MariaDB Connector/J 3.1.0 is a Stable (GA) release.
Other than features, connector permit significant performance improvements, reaching the same level of performance than c connector
Most significant change are :
improve performance reading big result-set
avoid creating array when receiving server packet
pipelining sent (PREPARE+EXECUTE) are now sent into a single buffer, permitting in some case to have only one TCP-IP packet for 2 mysql packet.
Benchmark using JMH one a single 4 core ubuntu 22.04 server (AWS c5.xlarge) shows :
simple resultset command : "Select 1"
Client side prepared statement parsing : "DO 1000 parameters"
resultset with lots of columns : ""select 1 row from a 100 int columns"
Since MariaDB server 10.7, a new UUID data format is supported. getter and setter can now pass java.util.UUID parameter (i.e. PrepareStatement setObject(index, ) / Resultset getObject(index, UUID.class) )
Resultset.getObject without class or type precision will now return UUID object for UUID fields by default
UUID metadata
Metadata for UUID fields will now return ResultSetMetaData.getColumnTypeName(index) => "uuid" ResultSetMetaData.getColumnClassName(index) => "java.util.UUID" ResultSetMetaData.getColumnType(index) => Types.OTHER
replacing :
ResultSetMetaData.getColumnTypeName(index) => "CHAR" ResultSetMetaData.getColumnClassName(index) => "java.lang.String" ResultSetMetaData.getColumnType(index) => Types.CHAR
For compatibility, a new option uuidAsString permit to consider UUID as String like previously.
load balance hosts are now chosen using ROUND ROBIN in place of RANDOM
default value for socket option useReadAheadInput change to false.
For a complete list of changes made in MariaDB Connector/J 3.1.0, with links to detailed information on each push, see the .
@Benchmark
public int run(MyState state) throws Throwable {
try (Statement st = state.connectionText.createStatement()) {
ResultSet rs = st.executeQuery("select 1");
rs.next();
return rs.getInt(1);
}
}private static final String sql;
static {
StringBuilder sb = new StringBuilder("do ?");
for (int i = 1; i < 1000; i++) {
sb.append(",?");
}
sql = sb.toString();
}
@Benchmark
public int text(MyState state) throws Throwable {
try (PreparedStatement st = state.connectionText.prepareStatement(sql)) {
for (int i = 1; i <= 1000; i++) {
st.setInt(i, i);
}
return st.executeUpdate();
}
}@Benchmark
public int[] text(MyState state) throws Throwable {
try (PreparedStatement prep = state.connectionText.prepareStatement("select * FROM test100")) {
ResultSet rs = prep.executeQuery();
rs.next();
int[] objs = new int[100];
for (int i = 0; i < 100; i++) {
objs[i] = rs.getInt(i + 1);
}
return objs;
}
}


This page is: Copyright © 2025 MariaDB. All rights reserved.