{"record":{"id":"cd2665be73a6d958","repo":"prestodb/presto","slug":"preparestatement","errorCode":null,"errorMessage":"prepareStatement","messagePattern":"prepareStatement","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoConnection.java","lineNumber":498,"sourceCode":"    {\n        if (autoGeneratedKeys != Statement.RETURN_GENERATED_KEYS) {\n            throw new SQLFeatureNotSupportedException(\"Auto generated keys must be NO_GENERATED_KEYS\");\n        }\n        return prepareStatement(sql);\n    }\n\n    @Override\n    public PreparedStatement prepareStatement(String sql, int[] columnIndexes)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"prepareStatement\");\n    }\n\n    @Override\n    public PreparedStatement prepareStatement(String sql, String[] columnNames)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"prepareStatement\");\n    }\n\n    @Override\n    public Clob createClob()\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"createClob\");\n    }\n\n    @Override\n    public Blob createBlob()\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"createBlob\");\n    }\n\n    @Override\n    public NClob createNClob()","sourceCodeStart":480,"sourceCodeEnd":516,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoConnection.java#L480-L516","documentation":"PrestoConnection does not implement the JDBC 4.x prepareStatement(String sql, String[] columnNames) overload for auto-generated key column names. It unconditionally throws SQLFeatureNotSupportedException with message \"prepareStatement\".","triggerScenarios":"Calling connection.prepareStatement(sql, new String[]{\"id\"}) (or any non-null columnNames array) on a Presto JDBC connection.","commonSituations":"ORM frameworks (e.g. Hibernate with getGeneratedKeys by column) or generic JDBC code that uses the columnNames overload; porting an application from MySQL/PostgreSQL drivers to Presto JDBC.","solutions":["Use the simple prepareStatement(String sql) or prepareStatement(String, int) (Statement.RETURN_GENERATED_KEYS) overloads if applicable","Remove reliance on generated-key column names — Presto does not return auto-generated keys like OLTP databases","If using an ORM, configure it to not request generated keys via column names (e.g. disable getGeneratedKeys)"],"exampleFix":"// before\nPreparedStatement ps = conn.prepareStatement(sql, new String[]{\"id\"});\n// after\nPreparedStatement ps = conn.prepareStatement(sql);","handlingStrategy":"try-catch","validationCode":"if (columnNames != null) {\n    throw new UnsupportedOperationException(\"Presto JDBC does not support prepareStatement(sql, columnNames)\");\n}","typeGuard":null,"tryCatchPattern":"PreparedStatement ps;\ntry {\n    ps = conn.prepareStatement(sql, columnNames);\n} catch (SQLFeatureNotSupportedException e) {\n    ps = conn.prepareStatement(sql); // Presto does not return generated keys\n}","preventionTips":["Use prepareStatement(String) with Presto JDBC; do not request generated keys by column","Configure ORMs (e.g. Hibernate) to disable getGeneratedKeys for Presto dialects","Check driver feature support (DatabaseMetaData.supportsGetGeneratedKeys) before using key-returning overloads"],"tags":["jdbc","unsupported-operation"],"backgroundTag":"sql-feature-not-supported","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}