apache/shardingsphere · error · SQLFeatureNotSupportedException
getClientInfo
Error message
getClientInfo
What it means
ShardingSphere's JDBC driver does not implement the java.sql.Connection method getClientInfo (reading all JDBC 4 client info properties set on the connection). The abstract base class AbstractUnsupportedOperationConnection, which ShardingSphereConnection extends, overrides it as final and unconditionally throws SQLFeatureNotSupportedException. ShardingSphere does not store per-connection client info, so both getClientInfo overloads always throw. The exception is thrown the moment the method is invoked on any connection produced by the ShardingSphere Driver.
Source
Thrown at jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationConnection.java:119
@Override
public final NClob createNClob() throws SQLException {
throw new SQLFeatureNotSupportedException("createNClob");
}
@Override
public final SQLXML createSQLXML() throws SQLException {
throw new SQLFeatureNotSupportedException("createSQLXML");
}
@Override
public final Struct createStruct(final String typeName, final Object[] attributes) throws SQLException {
throw new SQLFeatureNotSupportedException("createStruct");
}
@Override
public final Properties getClientInfo() throws SQLException {
throw new SQLFeatureNotSupportedException("getClientInfo");
}
@Override
public final String getClientInfo(final String name) throws SQLException {
throw new SQLFeatureNotSupportedException("getClientInfo name");
}
@Override
public final void setClientInfo(final String name, final String value) {
throw new UnsupportedSQLOperationException("setClientInfo name value");
}
@Override
public final void setClientInfo(final Properties props) {
throw new UnsupportedSQLOperationException("setClientInfo properties");
}
}
View on GitHub (pinned to e952770a21)
Solutions
- Remove or guard the getClientInfo() call with a catch of SQLFeatureNotSupportedException.
- Carry correlation metadata in a different way: ThreadLocal/MDC for tracing, or application-level context tables.
- If backend-native client info is needed (e.g. MySQL session variables), execute SET SESSION statements or unwrap the backend connection instead.
Defensive patterns
Strategy: try-catch
Validate before calling
boolean supportsOp = false;
try {
connection.getMetaData(); // connection is alive
// JDBC has no capability flag for individual methods; probe once per JVM:
supportsOp = probeSupport(connection); // reflective/one-time guarded call
} catch (final SQLException ignored) {
}
// Simpler and recommended: capability-check by driver URL
boolean isShardingSphere = url.startsWith("jdbc:shardingsphere:");
if (isShardingSphere) {
// skip the unsupported call, use the alternative API path
} Try / catch
try {
connection.getClientInfo(/* args */);
} catch (final SQLFeatureNotSupportedException e) {
// expected on ShardingSphere connections: fall back to supported API
log.debug("Driver does not support getClientInfo, using fallback", e);
} Prevention
- APM agents should probe getClientInfo in a guarded try or disable connection-naming via client info for ShardingSphere URLs.
- Check the JDBC URL before calling optional JDBC 4 methods: connections starting with jdbc:shardingsphere: never support the lob/network-timeout/client-info/callable APIs.
- Catch java.sql.SQLFeatureNotSupportedException (parent of ShardingSphere's UnsupportedSQLOperationException) around optional driver-capability calls so the application degrades gracefully.
When it happens
Trigger: Calling Connection.getClientInfo() (no-arg) on a ShardingSphere connection.
Common situations: Application-performance monitors (APM agents like New Relic, Datadog) that stamp and later read connection metadata; connection pools that propagate user context via client info; debugging utilities dumping connection properties.
Related errors
AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14).
Data as JSON: /api/errors/9ebce292eeda63d3.
Report an issue: GitHub.