prestodb/presto · warning · SQLFeatureNotSupportedException
setSQLXML
Error message
setSQLXML
What it means
PrestoPreparedStatement.setSQLXML is a stub throwing SQLFeatureNotSupportedException. The driver does not support java.sql.SQLXML parameters; Presto has no XML locator type in its JDBC layer. XML data must be passed as a string value.
Source
Thrown at presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java:617
@Override
public void setBlob(int parameterIndex, InputStream inputStream, long length)
throws SQLException
{
throw new SQLFeatureNotSupportedException("setBlob");
}
@Override
public void setNClob(int parameterIndex, Reader reader, long length)
throws SQLException
{
throw new SQLFeatureNotSupportedException("setNClob");
}
@Override
public void setSQLXML(int parameterIndex, SQLXML xmlObject)
throws SQLException
{
throw new SQLFeatureNotSupportedException("setSQLXML");
}
@Override
public void setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength)
throws SQLException
{
throw new SQLFeatureNotSupportedException("setObject");
}
@Override
public void setAsciiStream(int parameterIndex, InputStream x, long length)
throws SQLException
{
throw new NotImplementedException("PreparedStatement", "setAsciiStream");
}
@Override
public void setBinaryStream(int parameterIndex, InputStream x, long length)View on GitHub (pinned to 55bb57d202)
Solutions
- Call sqlObject.getString() and bind with setString
- Store XML as a VARCHAR/JSON column and bind via setString or setObject(String)
- Handle XML parsing in application code rather than relying on driver-side SQLXML support
Example fix
// before pstmt.setSQLXML(1, sqlxml); // after pstmt.setString(1, sqlxml.getString());
Defensive patterns
Strategy: fallback
Validate before calling
if (value instanceof java.sql.SQLXML) { pstmt.setString(parameterIndex, ((java.sql.SQLXML) value).getString()); } Type guard
boolean isLocatorType(Object v) { return v instanceof java.sql.SQLXML || v instanceof java.sql.Clob || v instanceof java.sql.Blob || v instanceof java.sql.NClob; } Try / catch
try { pstmt.setSQLXML(idx, sqlxml); } catch (SQLFeatureNotSupportedException e) { pstmt.setString(idx, sqlxml.getString()); } Prevention
- Represent XML as String/VARCHAR in Presto schemas
- Never construct SQLXML objects for Presto-bound parameters
- Parse/validate XML in application code, not via JDBC SQLXML
When it happens
Trigger: Calling PreparedStatement.setSQLXML(int parameterIndex, java.sql.SQLXML xmlObject) on a PrestoPreparedStatement; code paths that bind XML-typed values via the JDBC 4 SQLXML API.
Common situations: Applications ported from DB2/Oracle XML-enabled columns; generic persistence frameworks that map XML column types to setSQLXML.
Related errors
- Result set type must be TYPE_FORWARD_ONLY
- Result set concurrency must be CONCUR_READ_ONLY
- Result set holdability must be HOLD_CURSORS_OVER_COMMIT
- privileges not supported
- row identifiers not supported
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/60a185861a9e0332.
Report an issue: GitHub.