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.
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.
Appendix: 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)