异常:com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:sqlserver://

异常提示

2021-10-26 15:46:20.137  INFO 6656 --- [           main] e.d.AndroidJavaSqlserverApplicationTests : Starting AndroidJavaSqlserverApplicationTests using Java 1.8.0_312 on SH5003147002 with PID 6656 (started by chaotian in C:\workspaces\IDEA\android-java-sqlserver)
2021-10-26 15:46:20.140  INFO 6656 --- [           main] e.d.AndroidJavaSqlserverApplicationTests : No active profile set, falling back to default profiles: default
2021-10-26 15:46:21.315  WARN 6656 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.
2021-10-26 15:46:21.795 ERROR 6656 --- [           main] c.a.druid.pool.DruidAbstractDataSource   : maxIdle is deprecated
2021-10-26 15:46:23.055  INFO 6656 --- [           main] e.d.AndroidJavaSqlserverApplicationTests : Started AndroidJavaSqlserverApplicationTests in 3.493 seconds (JVM running for 4.872)
class com.alibaba.druid.pool.DruidDataSource
2021-10-26 15:46:23.539  INFO 6656 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2021-10-26 15:46:23.793 ERROR 6656 --- [eate-1058686869] com.alibaba.druid.pool.DruidDataSource   : create connection SQLException, url: jdbc:sqlserver://localhost:1433;DatabaseName=student, errorCode 0, state null

java.sql.SQLException: validateConnection false
	at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1418) ~[druid-1.2.8.jar:1.2.8]
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1733) ~[druid-1.2.8.jar:1.2.8]
	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2838) ~[druid-1.2.8.jar:1.2.8]
Caused by: java.lang.NullPointerException: null
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.ensureSQLSyntax(SQLServerStatement.java:778) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:822) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:767) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7418) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3272) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:247) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:222) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.execute(SQLServerStatement.java:743) ~[mssql-jdbc-9.2.1.jre8.jar:na]
	at com.alibaba.druid.pool.vendor.MSSQLValidConnectionChecker.isValidConnection(MSSQLValidConnectionChecker.java:50) ~[druid-1.2.8.jar:1.2.8]
	at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1398) ~[druid-1.2.8.jar:1.2.8]
	... 2 common frames omitted

出现场景: springboot + druid + sqlserver

 

 在执行以下测试的时候就会报错

原因:druid的版本问题,具体未知

解决办法:修改druid的版本

 可以看到druid的版本已经到了1.2.8.而我就是用的这个版本才报的错。在网上找的方法都是让改到1.1.10,经测试确实是可以。通过对每一个版本的测试,1.2.5版本是可以解决问题的,版本再新就不行了。

 

 如图,改了druid的版本后这条路已经通了

参考:java.sql.SQLException: validateConnection false 

2025-04-02 17:34:58.687 ERROR 17912 --- [eate-1833567735] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://localhost:3306/sky_db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true, errorCode 1049, state 42000 java.sql.SQLSyntaxErrorException: Unknown database 'sky_db' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.30.jar:8.0.30] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.30.jar:8.0.30] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.30.jar:8.0.30] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.30.jar:8.0.30] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.30.jar:8.0.30] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.30.jar:8.0.30] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1651) ~[druid-1.2.1.jar:1.2.1] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1717) ~[druid-1.2.1.jar:1.2.1] at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2785) ~[druid-1.2.1.jar:1.2.1]
04-03
<think>嗯,用户遇到了DruidDataSource连接MySQL时出现“Unknown database 'sky_db'”的错误,需要解决这个问题。首先,我得分析可能的原因。最常见的情况应该是数据库不存在,用户可能没创建或者名字拼写错误。这时候应该检查数据库名称是否正确,包括大小写,因为MySQL在某些系统下是区分大小写的。 然后,考虑连接配置的问题。用户可能在Druid的配置文件中写错了数据库名,比如URL中的数据库名是否一致。比如,jdbc:mysql://localhost:3306/sky_db,这里的sky_db是否存在。还有可能用户用了默认的数据库,比如没有指定,或者指定了但权限不足,导致无法访问。 接下来是权限问题。即使数据库存在,如果使用的MySQL用户没有访问该数据库的权限,也会报错。这时候需要检查用户权限,比如用GRANT命令授权。 另外,网络连接问题也可能导致这个错误,比如MySQL服务器没启动,或者端口不对,或者主机地址写错了。这时候需要确认MySQL服务是否正常运行,能否通过命令行工具连接。 还有驱动版本的问题,如果Druid用的JDBC驱动版本太旧,可能无法正确识别数据库,或者存在兼容性问题,需要升级驱动版本。 解决方案的话,应该分步骤来。首先检查数据库是否存在,不存在的话创建。然后检查连接配置中的数据库名是否正确,再检查用户权限,接着确认MySQL服务状态,最后考虑驱动版本。每一步都要有具体的操作命令,比如用CREATE DATABASE创建数据库,用SHOW GRANTS检查权限,用mysql命令行测试连接等。 可能用户还容易忽略MySQL的配置,比如是否允许远程连接,或者是否启用了skip-name-resolve之类的参数,导致连接问题。不过这些可能属于更深层次的排查,先解决基础问题。 还有,错误信息里提到的是DruidDataSource,所以需要检查Druid的配置参数,确认url、username、password是否正确,特别是url中的数据库名称是否正确。有时候可能配置文件中使用了变量,但变量没有被正确替换,导致数据库名错误。 最后,可能用户是刚接触这些技术,所以在回答时要尽量详细,给出具体的命令和代码示例,方便用户一步步操作。同时,提供相关问题,帮助用户扩展了解,比如如何验证数据库连接、Druid连接池配置注意事项等。</think>### DruidDataSource MySQL Unknown database 'sky_db' 错误解决方案 #### 1. 确认数据库是否存在 通过MySQL命令行执行: ```sql SHOW DATABASES LIKE 'sky_db'; ``` 若不存在需创建: ```sql CREATE DATABASE sky_db; ``` 注意:MySQL数据库名称大小写敏感性取决于系统配置[^1]。 #### 2. 检查连接配置 验证Druid配置参数: ```java // 示例配置 druid.datasource.url=jdbc:mysql://localhost:3306/sky_db?useUnicode=true druid.datasource.username=root druid.datasource.password=123456 ``` 特别注意url中端口号与数据库名的正确性。 #### 3. 验证用户权限 执行权限检查: ```sql SHOW GRANTS FOR 'your_username'@'host'; ``` 授权示例: ```sql GRANT ALL PRIVILEGES ON sky_db.* TO 'username'@'%'; ``` #### 4. 测试基础连接 使用mysql命令测试连接: ```bash mysql -u root -p -h 127.0.0.1 -P 3306 sky_db ``` #### 5. 检查MySQL服务状态 查看服务运行状态: ```bash systemctl status mysql ``` #### 6. 驱动版本检查 建议使用MySQL Connector/J 8.x版本: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值