{"record":{"id":"758840720b2a72c3","repo":"apache/seatunnel","slug":"invalid-jdbc-url-format-s-expected-pattern-j","errorCode":null,"errorMessage":"Invalid JDBC URL format: [%s], expected pattern: jdbc:<scheme>://host:port[/database]","messagePattern":"Invalid JDBC URL format: \\[(.+?)\\], expected pattern: jdbc:<scheme>://host:port\\[/database\\]","errorType":"validation","errorClass":"OptionValidationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcCommonOptions.java","lineNumber":215,"sourceCode":"     * is optional to maintain backward compatibility with connectors (e.g. StarRocks, Doris) that\n     * specify the database in the query or table_path instead of the URL.\n     */\n    public static class UrlContainsDatabaseValidator implements ConditionExtension<String> {\n        @Override\n        public String description() {\n            return \"JDBC URL must be a valid format: jdbc:<scheme>://host:port[/database]\";\n        }\n\n        @Override\n        public boolean evaluate(ReadonlyConfig config, String url) {\n            if (url == null || url.trim().isEmpty()) {\n                return false;\n            }\n            try {\n                JdbcUrlUtil.UrlInfo urlInfo = JdbcUrlUtil.getUrlInfo(url);\n                return StringUtils.isNotBlank(urlInfo.getHost());\n            } catch (IllegalArgumentException e) {\n                throw new OptionValidationException(\n                        String.format(\n                                \"Invalid JDBC URL format: [%s], \"\n                                        + \"expected pattern: jdbc:<scheme>://host:port[/database]\",\n                                url));\n            }\n        }\n    }\n}\n","sourceCodeStart":197,"sourceCodeEnd":224,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcCommonOptions.java#L197-L224","documentation":"JdbcCommonOptions URL validation parses every generic JDBC url with JdbcUrlUtil.getUrlInfo and requires the form jdbc:<scheme>://host:port[/database]. When parsing fails it throws an OptionValidationException with the generic pattern message. This is a startup-time sanity check for the connector's url option.","triggerScenarios":"Passing a url that is blank, uses a non-host based form (e.g. jdbc:sqlite:/path/file.db or service-name TNS strings), omits //host:port, or is otherwise rejected by JdbcUrlUtil.getUrlInfo.","commonSituations":"Using file-style URLs (H2, SQLite) with the generic option, forgetting the port, URL built by string concatenation that lost the scheme, environment-specific placeholders left unsubstituted (e.g. ${DB_HOST}).","solutions":["Rewrite the URL as jdbc:<scheme>://host:port[/database], e.g. jdbc:mysql://localhost:3306/mydb","Check the scheme portion is present and the host is non-blank after //","Replace unresolved placeholders (${...}) with actual values in the rendered config","If your database genuinely requires a non-host URL form, verify the connector variant supports it"],"exampleFix":"// before\nString url = \"jdbc:mysql://localhost/mydb\"; // missing port is OK, but placeholder breaks parse\nString url = \"jdbc:mysql://${DB_HOST}:3306/mydb\";\n// after\nString url = \"jdbc:mysql://10.0.0.5:3306/mydb\";","handlingStrategy":"validation","validationCode":"String url = (String) options.get(\"url\");\nif (url == null || !url.matches(\"jdbc:[a-z0-9]+://[^:/\\\\s]+:\\\\d+.*\")) {\n    throw new IllegalArgumentException(\"url must be jdbc:<scheme>://host:port[/database]\");\n}","typeGuard":"static boolean isValidJdbcUrl(String url) {\n    return url != null && url.startsWith(\"jdbc:\") && url.contains(\"://\")\n        && !url.substring(url.indexOf(\"://\") + 3).isBlank();\n}","tryCatchPattern":"try {\n    JdbcCommonOptions.validateUrl(url);\n} catch (OptionValidationException e) {\n    throw new IllegalArgumentException(\"Fix 'url' option: \" + e.getMessage(), e);\n}","preventionTips":["Always include host and port in JDBC URLs","Substitute environment placeholders before job submission","Add a CI check that renders and validates JDBC URLs","Keep a per-database URL template reference"],"tags":["jdbc","config-validation","url"],"backgroundTag":"invalid-url-format","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}