apache/shardingsphere · error · SQLFeatureNotSupportedException
updateByte
Error message
updateByte
What it means
updateByte(int, byte) is another member of the JDBC in-place row-update API that the ShardingSphere federation ResultSet intentionally omits. The final method unconditionally throws SQLFeatureNotSupportedException since federated result rows cannot be written back.
Source
Thrown at kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/AbstractUnsupportedUpdateOperationSQLFederationResultSet.java:64
@Override
public final void updateNull(final String columnLabel) throws SQLException {
throw new SQLFeatureNotSupportedException("updateNull");
}
@Override
public final void updateBoolean(final int columnIndex, final boolean x) throws SQLException {
throw new SQLFeatureNotSupportedException("updateBoolean");
}
@Override
public final void updateBoolean(final String columnLabel, final boolean x) throws SQLException {
throw new SQLFeatureNotSupportedException("updateBoolean");
}
@Override
public final void updateByte(final int columnIndex, final byte x) throws SQLException {
throw new SQLFeatureNotSupportedException("updateByte");
}
@Override
public final void updateByte(final String columnLabel, final byte x) throws SQLException {
throw new SQLFeatureNotSupportedException("updateByte");
}
@Override
public final void updateShort(final int columnIndex, final short x) throws SQLException {
throw new SQLFeatureNotSupportedException("updateShort");
}
@Override
public final void updateShort(final String columnLabel, final short x) throws SQLException {
throw new SQLFeatureNotSupportedException("updateShort");
}
@OverrideView on GitHub (pinned to e952770a21)
Solutions
- Replace with an UPDATE statement binding the byte value to a PreparedStatement parameter.
- Check getConcurrency() before attempting any updateXXX call; treat CONCUR_READ_ONLY as 'use SQL updates'.
- Move such editing flows to a non-federated datasource or disable federation for those statements.
- Encapsulate all writes in one data-access layer so unsupported client-side updates cannot appear.
Example fix
// before resultSet.updateByte(4, (byte) 9); resultSet.updateRow(); // after // UPDATE item SET qty = ? WHERE id = ?
Defensive patterns
Strategy: validation
Validate before calling
if (resultSet.getConcurrency() != ResultSet.CONCUR_UPDATABLE) { /* issue UPDATE with parameter binding */ } Type guard
boolean isUpdatable(ResultSet rs) throws SQLException { return rs.getConcurrency() == ResultSet.CONCUR_UPDATABLE; } Try / catch
try { rs.updateByte(4, (byte) 9); rs.updateRow(); } catch (SQLFeatureNotSupportedException e) { /* UPDATE item SET qty = ? WHERE id = ? */ } Prevention
- Avoid type-dispatched updateXXX utilities against federation results.
- Persist numeric edits through prepared UPDATE statements.
- Mark federation datasources as read-only for editing tools.
When it happens
Trigger: Calling ResultSet.updateByte(columnIndex, (byte) x) on a federation ResultSet — editing a TINYINT/small-integer column client-side via the updatable-ResultSet protocol.
Common situations: Generic JDBC table editors that iterate updateXXX overloads matched to column types; ORM rowset implementations; code written against MySQL/Oracle updatable cursors reused under federation.
Related errors
AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14).
Data as JSON: /api/errors/5330d472ca32e0dc.
Report an issue: GitHub.