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
- Avoid calling getParameterMetaData; determine parameter count and types from the SQL and schema instead
- Wrap the call in a feature check / catch NotImplementedException and fall back to schema-derived metadata
- 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
- Do not rely on getParameterMetaData in code paths that must run against Presto
- Derive parameter count/types from the SQL text and Presto catalog metadata instead
- Guard optional JDBC capabilities behind feature checks per product
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
- privileges not supported
- row identifiers not supported
- version columns not supported
- primary keys not supported
- imported keys not supported
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/aa1e58eeee99fc4b.
Report an issue: GitHub.