SSM新项目搭建报错:
com.mchange.v2.c3p0.DriverManagerDataSource. Could not load driverClass com.mysql.cj.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
报错详情如下
环境:
- Tomcat9.0.24
- MySQL8.0.19
- MyBatis3.5.2
- SpringMVC5.1.9
使用localhost:8080/login,点击登录无法跳转。
首先,根据错误找到是c3p0抛出的错误,并且错误原因是数据库驱动加载失败。
此问题解决方案多样:
1、检查jdbc.properties文件中的jdbc.driver=com.mysql.cj.jdbc.Driver后是否有空格或者回车,如图所示
如果无误或者修改后仍然报错,请看2
2、检查xml文件中的name是否有空格
如图所示
如果还未解决,请看3
3、检查pom.xml中数据库版本与本机数据库版本是否对应
如果数据库是MySQL 5.x的,驱动应该写为jdbc.driver=com.mysql.jdbc.Driver
如果数据库是MySQL 8.x的,驱动应该写为jdbc.driver=com.mysql.cj.jdbc.Driver
修改即可。
如还未解决,请看4
4、暂时更换为Spring自带数据源测试,检查是否仍然存在问题。
如果仍然报错,则检查pom.xml文件中c3p0数据源的版本,如果版本较低,则也会出现错误,截至目前,c3p0最新版本为0.9.5.5
最新版本请查:点击进入官网
如果问题仍然得不到解决,则看5
5、检查jdbc.url是否有useSSL=true
如下
jdbc:mysql://localhost:3306/mysql?useSSL=true
修改为useSSL=false
如果再不成功,请看6
6、检查jdbc.properties中是否填写规范
错误示范
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mysql?useSSL=false
password=root123
正确示范
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
jdbc.user=root
jdbc.password=root123
主要规范了字段名前加了一个jdbc.
和jdbc.url中是否设置时区。
如果仍然无法解决,请看最后一个方案7
7、检查项目配置中是否在lib中导入了正确的mysql包和c3p0
MySQL对应包mysql-content-java-8.0.19.jar
c3p0对应包c3p0-0.9.5.5.jar
如何检查?
如图所示
1)
2)
3)检查圈中的三个是否变红
如果变红,则此处是为罪魁祸首。
将其选中删除,并重新导入,导入步骤如图所示:
1))
2))
3))
点击Apply应用,完成修改,重新运行成功。
总结:在SSM项目web工程中,每导入一个新的依赖,都需要去项目结构的lib中引入。如何引入,详情请看:查看文章
## 锦上添花:
如有需要可以在pomxml中添加c3p0的辅助工具:
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.20</version>
</dependency>