apache/shardingsphere · error · UnsupportedSQLOperationException

setClientInfo name value

Error message

setClientInfo name value

What it means

ShardingSphere's JDBC driver does not implement the java.sql.Connection method setClientInfo name value (setting a single named JDBC 4 client info property (e.g. ApplicationName, ClientUser) on the connection). The abstract base class AbstractUnsupportedOperationConnection, which ShardingSphereConnection extends, overrides it as final and unconditionally throws SQLFeatureNotSupportedException. ShardingSphere deliberately rejects client-info mutation with UnsupportedSQLOperationException (an SQLFeatureNotSupportedException subtype without checked wrapping semantics), so the single-property setter always throws. The exception is thrown the moment the method is invoked on any connection produced by the ShardingSphere Driver.

Solutions

  1. Remove the setClientInfo call when running behind ShardingSphere, or wrap it in a tolerant catch.
  2. Set the equivalent backend property in the storage-unit JDBC URL (e.g. PostgreSQL ApplicationName=..., MySQL connectionAttributes) so it reaches the real connections.
  3. Unwrap the underlying driver connection and call setClientInfo on it directly, accepting per-backend rather than per-logical-connection semantics.

Example fix

// before
connection.setClientInfo("ApplicationName", "billing-service");

// after (set it on the backend URL instead)
// url: jdbc:postgresql://db-host:5432/app?ApplicationName=billing-service
// or unwrap the real connection:
try {
    connection.setClientInfo("ApplicationName", "billing-service");
} catch (final SQLException ignored) {
    // ShardingSphere driver does not support client info
}
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.setClientInfo(/* args */);
} catch (final SQLFeatureNotSupportedException e) {
    // expected on ShardingSphere connections: fall back to supported API
    log.debug("Driver does not support setClientInfo name value, using fallback", e);
}

Prevention

When it happens

Trigger: Calling Connection.setClientInfo(name, value) on a ShardingSphere connection.

Common situations: APM agents (Datadog, Elastic, New Relic) stamping connection names at checkout; connection pools propagating end-user identity; SQL Server/PostgreSQL users setting ApplicationName for sys.dm_exec_sessions/pg_stat_activity visibility.

Related errors


AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14). Data as JSON: /api/errors/13c271b3a70c40d6. Report an issue: GitHub.

Appendix: source

Thrown at jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationConnection.java:129

    
    @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)