prestodb/presto · warning · NotImplementedException

Not implemented: PreparedStatement.getParameterMetaData

Error message

Not implemented: PreparedStatement.getParameterMetaData

What it means

PrestoPreparedStatement.getParameterMetaData throws NotImplementedException because the driver does not implement JDBC ParameterMetaData retrieval. Presto's wire protocol does not expose prepared-statement parameter metadata in the way this API requires. Code that introspects parameter types/count at runtime will always fail.

Source

Thrown at presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java:561

    @Override
    public void setNull(int parameterIndex, int sqlType, String typeName)
            throws SQLException
    {
        setNull(parameterIndex, sqlType);
    }

    @Override
    public void setURL(int parameterIndex, URL x)
            throws SQLException
    {
        throw new SQLFeatureNotSupportedException("setURL");
    }

    @Override
    public ParameterMetaData getParameterMetaData()
            throws SQLException
    {
        throw new NotImplementedException("PreparedStatement", "getParameterMetaData");
    }

    @Override
    public void setRowId(int parameterIndex, RowId x)
            throws SQLException
    {
        throw new SQLFeatureNotSupportedException("setRowId");
    }

    @Override
    public void setNString(int parameterIndex, String value)
            throws SQLException
    {
        setString(parameterIndex, value);
    }

    @Override
    public void setNCharacterStream(int parameterIndex, Reader value, long length)

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Avoid calling getParameterMetaData; determine parameter count and types from the SQL and schema instead
  2. Wrap the call in a feature check / catch NotImplementedException and fall back to schema-derived metadata
  3. Upgrade the Presto JDBC driver in case a newer version implements the API

Example fix

// before
ParameterMetaData pmd = pstmt.getParameterMetaData();
int count = pmd.getParameterCount();
// after
int count = countPlaceholders(sql); // derive from SQL text or known schema
Defensive patterns

Strategy: try-catch

Type guard

boolean supportsParameterMetaData(DatabaseMetaData dmd) { try { return dmd.supportsGetGeneratedKeys() && !dmd.getDatabaseProductName().contains("Presto"); } catch (SQLException e) { return false; } }

Try / catch

try (ParameterMetaData pmd = pstmt.getParameterMetaData()) { use(pmd); } catch (SQLFeatureNotSupportedException | NotImplementedException e) { fallBackToSchemaDerivedMetadata(); }

Prevention

When it happens

Trigger: Calling PreparedStatement.getParameterMetaData() on a PrestoPreparedStatement; ORM frameworks that call getParameterMetaData to validate or coerce bind values before executing a statement.

Common situations: Hibernate/JPA dialects or Spring JdbcTemplate wrappers that probe parameter metadata; generic JDBC tools (SQuirreL, DBeaver style code paths) inspecting statement parameters against Presto.

Related errors


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/aa1e58eeee99fc4b. Report an issue: GitHub.