{"record":{"id":"55077bb367a7a941","repo":"apache/shardingsphere","slug":"getparametertypename","errorCode":null,"errorMessage":"getParameterTypeName","messagePattern":"getParameterTypeName","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationParameterMetaData.java","lineNumber":58,"sourceCode":"    \n    @Override\n    public final int getPrecision(final int parameter) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getPrecision\");\n    }\n    \n    @Override\n    public final int getScale(final int parameter) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getScale\");\n    }\n    \n    @Override\n    public final int getParameterType(final int parameter) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getParameterType\");\n    }\n    \n    @Override\n    public final String getParameterTypeName(final int parameter) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getParameterTypeName\");\n    }\n    \n    @Override\n    public final String getParameterClassName(final int parameter) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getParameterClassName\");\n    }\n    \n    @Override\n    public final int getParameterMode(final int parameter) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getParameterMode\");\n    }\n}\n","sourceCodeStart":40,"sourceCodeEnd":71,"githubUrl":"https://github.com/apache/shardingsphere/blob/e952770a215630a3659c75d64369168cd3e26b82/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationParameterMetaData.java#L40-L71","documentation":"SQLFeatureNotSupportedException thrown by AbstractUnsupportedOperationParameterMetaData.getParameterTypeName(int). Without a backend PREPARE the ShardingSphere driver cannot resolve the SQL type name ('INTEGER', 'VARCHAR', ...) of a '?' placeholder, so the final method always throws; only getParameterCount() is supported.","triggerScenarios":"ps.getParameterMetaData().getParameterTypeName(i) on jdbc:shardingsphere:. Hit by SQL builders that render dialect-specific literals from parameter type names and by DB-compat test harnesses.","commonSituations":"Migration from PostgreSQL/Oracle drivers (which return type names) to sharding-jdbc; generic migration or introspection tooling run against the sharded datasource.","solutions":["Stop using ParameterMetaData for type-name introspection under ShardingSphere; hard-code the expected type from your mapping layer.","Introspect DatabaseMetaData.getColumns on the underlying database when a real type name is required.","Catch SQLFeatureNotSupportedException and degrade to a generic type handling path."],"exampleFix":"// before\nString typeName = pmd.getParameterTypeName(1);\n\n// after\nString typeName = \"INTEGER\"; // take from your column mapping, not ParameterMetaData","handlingStrategy":"try-catch","validationCode":"if (conn.getMetaData().getDriverName().toLowerCase().contains(\"shardingsphere\")) { typeName = expectedTypeFromMapping; } else { typeName = pmd.getParameterTypeName(1); }","typeGuard":null,"tryCatchPattern":"try { typeName = pmd.getParameterTypeName(1); } catch (final SQLFeatureNotSupportedException e) { typeName = null; /* use mapping default */ }","preventionTips":["Never introspect type names via ParameterMetaData on sharded datasources","Maintain your own parameter-index -> type mapping","Use DatabaseMetaData.getColumns for authoritative type names"],"tags":["jdbc","shardingsphere","parametermetadata","sql-feature-not-supported"],"backgroundTag":null,"analyzedSha":"e952770a215630a3659c75d64369168cd3e26b82","analyzedAt":"2026-08-14T13:54:53.392Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}