{"record":{"id":"e2afba0e97f2daf1","repo":"alibaba/druid","slug":"driverclassname-length-256","errorCode":null,"errorMessage":"driverClassName length > 256.","messagePattern":"driverClassName length > 256\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java","lineNumber":1269,"sourceCode":"\n        if (jdbcUrl != null) {\n            jdbcUrl = jdbcUrl.trim();\n        }\n\n        this.jdbcUrl = jdbcUrl;\n\n        // if (jdbcUrl.startsWith(ConfigFilter.URL_PREFIX)) {\n        // this.filters.add(new ConfigFilter());\n        // }\n    }\n\n    public String getDriverClassName() {\n        return driverClass;\n    }\n\n    public void setDriverClassName(String driverClass) {\n        if (driverClass != null && driverClass.length() > 256) {\n            throw new IllegalArgumentException(\"driverClassName length > 256.\");\n        }\n\n        if (JdbcConstants.ORACLE_DRIVER2.equalsIgnoreCase(driverClass)) {\n            driverClass = \"oracle.jdbc.OracleDriver\";\n            LOG.warn(\"oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver.\");\n        }\n\n        if (inited) {\n            if (StringUtils.equals(this.driverClass, driverClass)) {\n                return;\n            }\n\n            throw new UnsupportedOperationException();\n        }\n\n        this.driverClass = driverClass;\n    }\n","sourceCodeStart":1251,"sourceCodeEnd":1287,"githubUrl":"https://github.com/alibaba/druid/blob/fa8dc9912637a2f729eef9f55356621fec18d40e/core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java#L1251-L1287","documentation":"setDriverClassName rejects any non-null driverClass string longer than 256 characters. This is a defensive sanity check: a real JDBC driver class name is far shorter, so a >256 value almost always means a URL, SQL fragment, or other data was pasted into the driver-class field by mistake.","triggerScenarios":"Calling setDriverClassName(s) where s != null && s.length() > 256.","commonSituations":"Pasting a JDBC URL (jdbc:mysql://...) into the driverClassName property; a miswired Spring @Value binding the wrong property; a templating/placeholder expansion that concatenated extra text.","solutions":["Set driverClassName to the actual driver FQN (e.g. com.mysql.cj.jdbc.Driver).","Put the JDBC URL in setUrl/setJdbcUrl, not setDriverClassName.","Check property binding / placeholder resolution for accidental concatenation."],"exampleFix":"// before\n// ds.setDriverClassName(\"jdbc:mysql://localhost:3306/db?useSSL=false&...\");\n\n// after\n// ds.setDriverClassName(\"com.mysql.cj.jdbc.Driver\");\n// ds.setUrl(\"jdbc:mysql://localhost:3306/db?useSSL=false\");","handlingStrategy":"validation","validationCode":"String dc = driverClassName;\nif (dc != null && dc.length() > 256) {\n    throw new IllegalArgumentException(\"driverClassName looks like a URL/text, length > 256: \" + dc);\n}\nds.setDriverClassName(dc);","typeGuard":null,"tryCatchPattern":"try {\n    ds.setDriverClassName(value);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().equals(\"driverClassName length > 256.\")) {\n        // value is probably a JDBC URL or garbage; set the real driver FQN, put URL in setUrl\n    }\n    throw e;\n}","preventionTips":["Keep driverClassName to the driver's FQN (e.g. com.mysql.cj.jdbc.Driver).","Bind JDBC URLs to setUrl/setJdbcUrl, never to driverClassName.","Double-check Spring @Value / placeholder bindings for swapped properties."],"tags":["datasource","driver","validation","configuration"],"backgroundTag":null,"analyzedSha":"fa8dc9912637a2f729eef9f55356621fec18d40e","analyzedAt":"2026-08-14T04:55:06.789Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}