prestodb/presto · error · SQLException
Prepared SQL is not an update statement:
Error message
Prepared SQL is not an update statement:
What it means
executeLargeUpdate executes the prepared statement via 'EXECUTE <statementName>'; if super.execute returns true the statement returned a result set, so it is not an update. This SQLException fires when the caller calls executeUpdate/executeLargeUpdate on a prepared query statement (e.g. a SELECT).
Source
Thrown at presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java:129
}
return getResultSet();
}
@Override
public int executeUpdate()
throws SQLException
{
requireNonBatchStatement();
return Ints.saturatedCast(executeLargeUpdate());
}
@Override
public long executeLargeUpdate()
throws SQLException
{
requireNonBatchStatement();
if (super.execute(getExecuteSql(statementName, toValues(parameters)))) {
throw new SQLException("Prepared SQL is not an update statement: " + originalSql);
}
return getLargeUpdateCount();
}
@Override
public boolean execute()
throws SQLException
{
requireNonBatchStatement();
return super.execute(getExecuteSql(statementName, toValues(parameters)));
}
@Override
public void setNull(int parameterIndex, int sqlType)
throws SQLException
{
checkOpen();
setParameter(parameterIndex, typedNull(sqlType));View on GitHub (pinned to 55bb57d202)
Solutions
- Use executeQuery() when the prepared statement is a SELECT that returns rows
- Verify the original SQL is an update/DDL statement before calling executeUpdate
- Handle dynamically-typed statements with generic execute() and branch on its boolean return
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java:129 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/7349252a2d52a894.
Report an issue: GitHub.