Could not get JDBC connection

Posted 卖了地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Could not get JDBC connection相关的知识,希望对你有一定的参考价值。

想学习下JavaWeb,手头有2017年有活动的时候买的一本书,还是全彩的,应该很适合我这种菜鸟技术渣。

只可惜照着书搭建了一套Web环境,代码和db脚本都是拷贝的光盘里的,也反复检查了数据库的连接情况,Navicat可以正常连,涉及到的两个数据库配置文件里面的url、端口、密码应该都是对的,反复折腾了一晚上没搞定,临了百度一顿乱搜,看到一个帖子(https://www.2cto.com/database/201807/762696.html)里面提到的一句话(最后发现因为我使用的是mysql8.0,mysql-connector-java-5.1.28-bin.jar的驱动需要升级,于是我升级到了mysql-connector-java-8.0.11-bin.jar.),感觉有戏,因为我本地装的mysql也是8的,只是已经2点多了,吃不消赶紧睡了,第二天再看吧。报错日志:

### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 6002, active 0, maxActive 20] with root cause

java.lang.NullPointerException

at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3307)

at com.mysql.jdbc..sendConnectionAttributes(MysqlIO.java:1985)

at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1911)

at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288)

at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)

at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)

at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)

at sun.reflect.GeneratedConstructorAccessor32.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)

at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1408)

at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1464)

at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1969)

 

第二天了,晚上。开始下配套mysql客户端,打开官网发现有点小慢,所以就同时继续百度搜,发现csdn的都要虚拟币什么的,又不想注册,放弃。

继续搜突然发现个不错的地址http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/ 里面各种mysql-connector版本,看地址是宝岛某大学的ftp服务器,就下了个配套的mysql-connector-java-8.0.15.zip,解压了以后放到我工程的对应目录下,其实一开始也不知道要放到哪个目录,就mysql-connector*搜了下才找到旧包路径是WebContent/WEB-INF/lib/mysql-connector-java-5.1.30.jar,直接改成mysql-connector-java-5.1.30.jar.bak,把mysql-connector-java-8.0.15.jar放过去。

完了还看到说要改driver和url的,mysql8需要的,只好改啊,发现相关的有两个文件jdbc.properties和spring-pz-shiro.xml(登录鉴权模块)

jdbc.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mydb
=>
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimezone=UTC
sprint-pz-shiro.xml:
<
bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb" /> </bean> => <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimezone=UTC" /> </bean>

改完了跑一把,又报个错误 “对实体 "serverTimezone" 的引用必须以 ‘;‘ 分隔符结尾。”,继续百度,参考https://blog.csdn.net/qq_33811662/article/details/80532721里面有一句话:

在 xml 中 &符号是作为实体字符形式存在的,参考 https://blog.csdn.net/qq_33811662/article/details/80231312,得知要把&改成&amp;

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&amp;serverTimezone=UTC" />
</bean>

然后页面就能正常打开不报错了!

 

小结:JDBC connection问题

1、检查数据库连接情况;

2、检查数据源配置情况,比如这里的jdbc.properties和spring-pz-shiro.xml

3、检查数据库客户端服务器版本配套情况,本案例中虽然检查了步骤1和2觉得都正常,最后发现应该说版本不匹配导致,还是要回头改步骤2的配置。

 

2019-04-12 23:50:05 第一遍随笔,开启我的畜奴农猿狮之路,打破世俗,突破自我。

以上是关于Could not get JDBC connection的主要内容,如果未能解决你的问题,请参考以下文章

Could not get JDBC Connection要怎么解决?

Connecting to 172.16.128.14:22...Could not connec

Could not get JDBC connection

spring | 踩坑 | Could not get JDBC Connectionl nested exception is java.sql.SQLException...

JDBC报错 消息 Could not get JDBC Connection; nested exception is java.sql.SQLException: Unknown system v

Error 500: Could not get JDBC Connection; nested exception is com.ibm.websphere.ce.cm.