apache/shardingsphere · error · SQLFeatureNotSupportedException

getTime

Error message

getTime

What it means

getTime(int columnIndex) is final and always throws in AbstractUnsupportedGeneratedKeysResultSet. The generated-keys result set returned by the ShardingSphere driver implements only getString/getNumeric/getObject families; java.sql.Time extraction from generated keys is not supported because the underlying values are plain Comparables without temporal semantics.

Solutions

  1. Read the key with rs.getString(1) and convert with java.sql.Time.valueOf(String) if it is genuinely a time literal.
  2. Use rs.getObject(1) and cast/convert in Java.
  3. Catch SQLFeatureNotSupportedException and fall back to string parsing.

Example fix

// before
Time t = rs.getTime(1);

// after
String raw = rs.getString(1);
Time t = raw == null ? null : java.sql.Time.valueOf(raw);
Defensive patterns

Strategy: try-catch

Validate before calling

Object key = rs.getObject(1); // decide conversion from runtime type

Type guard

static boolean isShardingGeneratedKeys(ResultSet rs) {
    return rs.getClass().getName().endsWith("GeneratedKeysResultSet");
}

Try / catch

try {
    t = rs.getTime(1);
} catch (SQLFeatureNotSupportedException e) {
    String raw = rs.getString(1);
    t = raw == null ? null : java.sql.Time.valueOf(raw);
}

Prevention

When it happens

Trigger: Calling rs.getTime(1) while iterating the ResultSet from Statement.getGeneratedKeys() after an INSERT via the ShardingSphere driver.

Common situations: Entity persisters that map generated key columns to arbitrary Java types including Time. Code reused from a MySQL/PostgreSQL project where getTime on generated keys worked.

Related errors


AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14). Data as JSON: /api/errors/c5df3b76409a4584. Report an issue: GitHub.

Appendix: source

Thrown at jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedGeneratedKeysResultSet.java:72

    
    @Override
    public final Date getDate(final String columnLabel) throws SQLException {
        throw new SQLFeatureNotSupportedException("getDate");
    }
    
    @Override
    public final Date getDate(final int columnIndex, final Calendar cal) throws SQLException {
        throw new SQLFeatureNotSupportedException("getDate");
    }
    
    @Override
    public final Date getDate(final String columnLabel, final Calendar cal) throws SQLException {
        throw new SQLFeatureNotSupportedException("getDate");
    }
    
    @Override
    public final Time getTime(final int columnIndex) throws SQLException {
        throw new SQLFeatureNotSupportedException("getTime");
    }
    
    @Override
    public final Time getTime(final int columnIndex, final Calendar cal) throws SQLException {
        throw new SQLFeatureNotSupportedException("getTime");
    }
    
    @Override
    public final Time getTime(final String columnLabel, final Calendar cal) throws SQLException {
        throw new SQLFeatureNotSupportedException("getTime");
    }
    
    @Override
    public final Time getTime(final String columnLabel) throws SQLException {
        throw new SQLFeatureNotSupportedException("getTime");
    }
    
    @Override

View on GitHub (pinned to e952770a21)