{"record":{"id":"1deed25353b06288","repo":"apache/shardingsphere","slug":"gettypemap","errorCode":null,"errorMessage":"getTypeMap","messagePattern":"getTypeMap","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationConnection.java","lineNumber":69,"sourceCode":"    \n    @Override\n    public final CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"prepareCall\");\n    }\n    \n    @Override\n    public final String nativeSQL(final String sql) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"nativeSQL\");\n    }\n    \n    @Override\n    public final void abort(final Executor executor) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"abort\");\n    }\n    \n    @Override\n    public final Map<String, Class<?>> getTypeMap() throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getTypeMap\");\n    }\n    \n    @Override\n    public final void setTypeMap(final Map<String, Class<?>> map) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"setTypeMap\");\n    }\n    \n    @Override\n    public int getNetworkTimeout() throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getNetworkTimeout\");\n    }\n    \n    @Override\n    public void setNetworkTimeout(final Executor executor, final int milliseconds) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"setNetworkTimeout\");\n    }\n    \n    @Override","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/apache/shardingsphere/blob/e952770a215630a3659c75d64369168cd3e26b82/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationConnection.java#L51-L87","documentation":"ShardingSphere's JDBC driver does not implement the java.sql.Connection method getTypeMap (retrieving the type map used for custom SQL type <-> Java class mapping). The abstract base class AbstractUnsupportedOperationConnection, which ShardingSphereConnection extends, overrides it as final and unconditionally throws SQLFeatureNotSupportedException. Custom-type mapping for structured types is not part of ShardingSphere's feature set, so the accessor is permanently unsupported. The exception is thrown the moment the method is invoked on any connection produced by the ShardingSphere Driver.","triggerScenarios":"Calling Connection.getTypeMap() on a ShardingSphere connection.","commonSituations":"Generic JDBC tools, ORMs, or mapping frameworks that read the type map while introspecting a connection; code ported from Oracle-style apps that use STRUCT type maps.","solutions":["Remove the getTypeMap() call; ShardingSphere cannot supply a type map.","Keep a plain JDBC connection (separate DataSource) for code paths that depend on custom type maps.","Unwrap the underlying driver connection and call getTypeMap() on it if per-backend type-map state is acceptable."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"boolean supportsOp = false;\ntry {\n    connection.getMetaData(); // connection is alive\n    // JDBC has no capability flag for individual methods; probe once per JVM:\n    supportsOp = probeSupport(connection); // reflective/one-time guarded call\n} catch (final SQLException ignored) {\n}\n// Simpler and recommended: capability-check by driver URL\nboolean isShardingSphere = url.startsWith(\"jdbc:shardingsphere:\");\nif (isShardingSphere) {\n    // skip the unsupported call, use the alternative API path\n}","typeGuard":null,"tryCatchPattern":"try {\n    connection.getTypeMap(/* args */);\n} catch (final SQLFeatureNotSupportedException e) {\n    // expected on ShardingSphere connections: fall back to supported API\n    log.debug(\"Driver does not support getTypeMap, using fallback\", e);\n}","preventionTips":["Remove type-map introspection from generic JDBC tooling when running against ShardingSphere.","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."],"tags":["jdbc","shardingsphere","unsupported-operation","connection-api"],"backgroundTag":null,"analyzedSha":"e952770a215630a3659c75d64369168cd3e26b82","analyzedAt":"2026-08-14T13:54:53.392Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}