prestodb/presto · error · SQLFeatureNotSupportedException
updateDouble
Error message
updateDouble
What it means
PrestoResultSet.updateDouble(columnIndex, x) is an unimplemented stub that always throws SQLFeatureNotSupportedException. The Presto JDBC driver does not implement updatable result sets; this method exists only to satisfy the JDBC interface and can never return normally. Writes must be expressed as SQL DML statements.
Source
Thrown at presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoResultSet.java:823
@Override
public void updateLong(int columnIndex, long x)
throws SQLException
{
throw new SQLFeatureNotSupportedException("updateLong");
}
@Override
public void updateFloat(int columnIndex, float x)
throws SQLException
{
throw new SQLFeatureNotSupportedException("updateFloat");
}
@Override
public void updateDouble(int columnIndex, double x)
throws SQLException
{
throw new SQLFeatureNotSupportedException("updateDouble");
}
@Override
public void updateBigDecimal(int columnIndex, BigDecimal x)
throws SQLException
{
throw new SQLFeatureNotSupportedException("updateBigDecimal");
}
@Override
public void updateString(int columnIndex, String x)
throws SQLException
{
throw new SQLFeatureNotSupportedException("updateString");
}
@Override
public void updateBytes(int columnIndex, byte[] x)View on GitHub (pinned to 55bb57d202)
Solutions
- Replace with an UPDATE statement using PreparedStatement.setDouble
- Route all writes through SQL and keep the ResultSet strictly read-only
- Skip updateXxx calls when supportsResultSetConcurrency(CONCUR_UPDATABLE) reports false
- Catch SQLFeatureNotSupportedException and translate it to a user-facing 'result sets are read-only' message
Example fix
// before
rs.updateDouble("price", 19.99);
rs.updateRow();
// after
try (PreparedStatement ps = conn.prepareStatement("UPDATE t SET price = ? WHERE id = ?")) {
ps.setDouble(1, 19.99);
ps.setLong(2, id);
ps.executeUpdate();
} Defensive patterns
Strategy: validation
Validate before calling
DatabaseMetaData md = conn.getMetaData();
if (!md.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE)) {
// use PreparedStatement UPDATE instead of rs.updateDouble
} Type guard
boolean isUpdatable(ResultSet rs) throws SQLException {
return rs.getConcurrency() == ResultSet.CONCUR_UPDATABLE;
} Try / catch
try {
rs.updateDouble(columnIndex, value);
} catch (SQLFeatureNotSupportedException e) {
// route to SQL UPDATE fallback
} Prevention
- Use PreparedStatement.setDouble with UPDATE for numeric writes
- Treat all Presto result sets as forward-only, read-only
- Do not adopt JDBC tooling that requires CONCUR_UPDATABLE with Presto
- Catch SQLFeatureNotSupportedException once in shared JDBC utilities
When it happens
Trigger: Calling rs.updateDouble(i, value) on any Presto ResultSet, usually followed by updateRow() or insertRow().
Common situations: Generic JDBC frameworks and data-grid editors that modify cells in place; application code reused from traditional RDBMS deployments and run against Presto.
Related errors
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/ddeb54d56987fa46.
Report an issue: GitHub.