JDBC 错误解决 [com.mysql.jdbc不存在]以及 [java.lang.NoClassDefFoundError]

博主在使用JDBC连接MySQL数据库时遇到了找不到包和NoClassDefFoundError的问题。首先,解决找不到包的问题,尝试将mysql-connector-java-5.1.23-bin.jar移动到JRE的lib/ext目录,虽然编译成功但运行时出现错误。最终,通过将jar包添加到系统环境变量CLASSPATH中解决了问题,具体做法是将jar路径改为相对路径并确保正确引用。

在JDBC的第一步,编译和运行就出现了错误,花了好久莫名其妙解决了,于是写这篇博客复盘一下解决的过程,希望能给帮到遇到一样问题的小伙伴(PS.虽然解决了,但其实并不明白原理,希望能够得到大佬的解答)

代码:

/*
	JDBC的六个步骤
*/
import java.sql.DriverManager;
import java.sql.Driver;
import java.sql.SQLException;

public class JDBCTest01{
	public static void main(String[] args){
		try{
			//第一步:注册驱动
			Driver driver = new com.mysql.jdbc.Driver();
			DriverManager.registerDriver(driver);
			System.out.println(driver);
		}catch(SQLException e){
			e.printStackTrace();
		}

	}
	
}

问题1 com.mysql.jdbc不存在:在使用DOS窗口运行Java程序连接数据库时出现找不到包的错误提示(jar包地址已经配置到系统环境变量classpath当中)

image-20211015170325746

  • 此时配置的环境变量CLASSPATH

    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;E:\JavaProjects\03-JDBC\mysql-connector-java-5.1.23-bin.jar
    
  • 解决措施:将jar包移动至C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext目录下,编译通过,但是运行报错,显示 java.lang.NoClassDefFoundError: com/mysql/jdbc/Driver

问题2 java.lang.NoClassDefFoundError

  • 背景:加了jar包后,编译通过运行不可通过,此时环境变量为

    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;E:\JavaProjects\03-JDBC\mysql-connector-java-5.1.23-bin.jar
    
  • 尝试方法1:加了jar包后,去除添加的环境变量->不可行

    image-20211016112058776

  • 尝试方法2:加了jar包后,更改环境变量->可行

    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;.\mysql-connector-java-5.1.23-bin.jar
    

    【一脸震惊】

    s

总结:

第一次写博客花了很多时间解决图片、格式等问题,但是还是很有收获滴,因此决定写博客分享自己的学习日记,还请各位多多指教!

### 问题分析与解决方案 `java.lang.NoClassDefFoundError: com.mysql.cj.jdbc.ClientPreparedStatement` 异常通常表明在运行时无法找到指定的类 `com.mysql.cj.jdbc.ClientPreparedStatement`。这可能是由于以下几个原因导致: 1. **缺少必要的JAR包**:MySQL驱动程序(如 `mysql-connector-java-8.x.x.jar`)未正确添加到项目的类路径中。 2. **兼容的MySQL驱动版本**:使用的MySQL驱动版本与数据库JDBC代码匹配。 3. **构建工具配置错误**:如果使用Maven或Gradle等构建工具,可能存在依赖范围配置当的问题。 以下是详细的解决方法: --- ### 解决方法 #### 方法一:确保MySQL驱动已正确添加 检查是否已将正确的MySQL驱动程序JAR包添加到项目中。例如,对于MySQL 8.x版本,需要使用 `mysql-connector-java-8.x.x.jar`。如果使用的是IDE(如Eclipse或IntelliJ IDEA),可以按照以下步骤操作: - 将 `mysql-connector-java-8.x.x.jar` 文件复制到项目的 `lib` 目录下[^5]。 - 右键点击该JAR文件,选择 `Add to Build Path`,确保其被正确加载。 #### 方法二:检查构建工具配置 如果使用Maven或Gradle管理项目依赖,请确保在 `pom.xml` 或 `build.gradle` 文件中正确声明了MySQL驱动依赖。 **Maven配置示例**: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> <scope>runtime</scope> </dependency> ``` **Gradle配置示例**: ```gradle implementation 'mysql:mysql-connector-java:8.0.30' ``` 注意:如果将依赖范围设置为 `provided`,则可能导致运行时找到类的情况[^4]。建议将范围更改为 `runtime` 或 `compile`。 #### 方法三:验证MySQL驱动版本 确认使用的MySQL驱动版本与数据库版本兼容。例如,MySQL 8.x推荐使用 `mysql-connector-java-8.x.x.jar`,而较低版本(如5.x)可能需要使用旧版驱动[^2]。 #### 方法四:检查运行环境 即使编译通过,运行时仍可能因类路径问题导致异常。确保以下几点: - JAR包已正确放置在运行环境的类路径中,例如 `C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext`[^1]。 - 如果使用外部工具(如Tomcat或Spring Boot),需确保JAR包已添加到对应的 `lib` 目录中。 #### 方法五:代码级别的调整 在代码中显式加载MySQL驱动类。例如: ```java try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } ``` 此步骤并非必须,因为从JDBC 4.0起,驱动程序会自动注册。但如果遇到问题,可以尝试手动加载以排查原因[^2]。 --- ### 示例代码 以下是一个完整的JDBC连接示例,确保所有必要步骤均已执行: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBCExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String user = "root"; String password = "password"; try { // 显式加载驱动(可选) Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 Connection connection = DriverManager.getConnection(url, user, password); System.out.println("Connection successful!"); // 关闭连接 connection.close(); } catch (ClassNotFoundException e) { System.err.println("Driver not found: " + e.getMessage()); } catch (SQLException e) { System.err.println("SQL Exception: " + e.getMessage()); } } } ``` --- ### 注意事项 1. 确保MySQL服务器正在运行,并且数据库连接参数(如URL、用户名、密码)正确无误。 2. 如果仍然报错,可以尝试清理并重新构建项目,以排除缓存问题。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值