{"record":{"id":"0e10954f8e0e1717","repo":"prestodb/presto","slug":"setcharacterstream","errorCode":null,"errorMessage":"setCharacterStream","messagePattern":"setCharacterStream","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java","lineNumber":666,"sourceCode":"    @Override\n    public void setAsciiStream(int parameterIndex, InputStream x)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"setAsciiStream\");\n    }\n\n    @Override\n    public void setBinaryStream(int parameterIndex, InputStream x)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"setBinaryStream\");\n    }\n\n    @Override\n    public void setCharacterStream(int parameterIndex, Reader reader)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"setCharacterStream\");\n    }\n\n    @Override\n    public void setNCharacterStream(int parameterIndex, Reader value)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"setNCharacterStream\");\n    }\n\n    @Override\n    public void setClob(int parameterIndex, Reader reader)\n            throws SQLException\n    {\n        throw new SQLFeatureNotSupportedException(\"setClob\");\n    }\n\n    @Override\n    public void setBlob(int parameterIndex, InputStream inputStream)","sourceCodeStart":648,"sourceCodeEnd":684,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-jdbc/src/main/java/com/facebook/presto/jdbc/PrestoPreparedStatement.java#L648-L684","documentation":"The length-less PreparedStatement.setCharacterStream(int, Reader) is unsupported in Presto's JDBC driver and throws SQLFeatureNotSupportedException. Character streaming is intentionally unimplemented; callers must provide text as a String.","triggerScenarios":"Calling PreparedStatement.setCharacterStream(parameterIndex, reader) on a PrestoPreparedStatement.","commonSituations":"JDBC 4 style code omitting length; ORMs detecting Reader parameters and choosing the stream setter.","solutions":["Read the Reader into a String and call setString(parameterIndex, value)","Use setObject with the String","Buffer the reader content via CharStreams.toString / Stream copy then setString","Avoid Reader-typed parameters entirely with this driver"],"exampleFix":"// before\nps.setCharacterStream(1, reader);\n// after\nStringBuilder sb = new StringBuilder();\nchar[] buf = new char[8192];\nint n;\nwhile ((n = reader.read(buf)) > 0) sb.append(buf, 0, n);\nps.setString(1, sb.toString());","handlingStrategy":"try-catch","validationCode":"if (value instanceof Reader) {\n    throw new IllegalStateException(\"Presto JDBC does not support setCharacterStream; use setString\");\n}","typeGuard":"boolean isSupportedParamType(Object v) {\n    return v instanceof String || v instanceof Number || v instanceof Boolean\n        || v instanceof byte[] || v instanceof java.sql.Date\n        || v instanceof java.sql.Time || v instanceof java.sql.Timestamp;\n}","tryCatchPattern":"try {\n    ps.setCharacterStream(idx, reader);\n} catch (SQLFeatureNotSupportedException e) {\n    ps.setString(idx, CharStreams.toString(reader));\n}","preventionTips":["Convert Readers to String before binding","Avoid persistence frameworks that auto-select stream setters for Reader types","Centralize setString-based binding for all text parameters","Review third-party DAO code for unsupported setter usage when switching to Presto"],"tags":["jdbc","presto","unsupported-feature"],"backgroundTag":"jdbc-method-not-implemented","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"}