基于Servlet与MySQL的项目数据库连接错误求助
解决JSP连接MySQL时的
com.mysql.jdbc.Driver找不到问题 核心原因
你遇到的错误本质是JVM无法找到MySQL JDBC驱动类,大概率是项目缺少对应驱动包,或是驱动版本与MySQL服务器版本不兼容导致的。
具体解决步骤
1. 匹配MySQL版本与驱动包
- 若你的MySQL是8.0及以上版本:驱动类名已更新为
com.mysql.cj.jdbc.Driver,且URL必须添加时区参数。 - 若为MySQL 5.x版本:驱动类保持
com.mysql.jdbc.Driver即可。
2. 给项目添加JDBC驱动包
手动添加方式
- 下载对应版本的MySQL JDBC驱动jar包(比如mysql-connector-java-8.0.30.jar)。
- 将jar包复制到项目的
WEB-INF/lib目录下(Servlet/JSP项目的依赖必须放在此目录才能被Web服务器识别)。
Maven管理方式(若项目用Maven)
在pom.xml中添加对应依赖:
<!-- MySQL 8.0+ 版本依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <!-- MySQL 5.x 版本依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency>
3. 调整代码适配驱动版本
针对MySQL 8.0+版本
修改代码中的驱动类和数据库连接URL:
// 替换原驱动类加载代码 Class.forName("com.mysql.cj.jdbc.Driver"); // 添加时区参数,示例用UTC,也可替换为Asia/Shanghai Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/recipes_db?useSSL=false&serverTimezone=UTC","root","");
针对MySQL 5.x版本
确认驱动包已放入WEB-INF/lib后,原代码的驱动类名无需修改,但可检查URL是否正确(5.x版本不需要时区参数)。
4. 额外排查项
- 确认MySQL服务正在运行(可通过
net start mysql命令或系统服务管理器查看)。 - 核对数据库用户名、密码是否正确,
root用户是否拥有recipes_db的访问权限。 - 检查3306端口是否被其他程序占用。
- 重启Web服务器(如Tomcat),确保新添加的驱动包被正确加载。
优化建议(可选)
- 不要在JSP中直接编写数据库连接逻辑,建议封装到独立的Java工具类(如
DBUtil.java),提升代码复用性和可维护性。 - 使用
try-with-resources语法自动关闭数据库资源,避免资源泄漏:
try (Connection con = DriverManager.getConnection(...); Statement st = con.createStatement(); ResultSet rs = st.executeQuery(query)) { // 结果集处理逻辑 } catch (Exception e) { // 异常处理 }
内容的提问来源于stack exchange,提问作者Reem
相关产品推荐
相关产品推荐

