如何解决在Java中的Java .lang.ClassNotFoundException?
ClassNotFoundException 是一个已检查的异常,当Java虚拟机 (JVM) 尝试加载特定类并且在类路径中找不到指定的类时会发生。
在过去,没有像 Eclipse 这样的编辑器可用。即使在记事本中,人们也已经进行了Java编码,并通过使用“ javac”命令来编译Java文件,并且他们会创建一个'.class'文件。有时不小心生成的类文件可能会丢失或设置在不同的位置,因此有很多机会发生“ClassNotFoundException”。在 Eclipse、Netbeans 等编辑器存在之后,IDE 会创建一个“ClassPath”文件类型的条目。
从上图中,我们可以看到存在很多 jar 文件。如果Java代码想要与 MySQL、MongoDB 等数据库交互,它们是绝对必要的,而且很少有功能需要这些 jar 文件出现在构建路径中。如果没有添加,首先编辑会自己显示错误并提供更正选项。
实现:连接MySQL数据库并获取内容的示例程序
例子
Java
// Java Program to check for MySQL connectivity Issue
// Importing database (SQL) libraries
import java.sql.*;
// Main Class
public class MySQLConnectivityCheck {
public static void main(String[] args)
{
// Display message for better readibility
System.out.println(
"---------------------------------------------");
// Initially setting connection object
// and result set to null
Connection con = null;
ResultSet res = null;
// Try block to check for exceptions
try {
// We need to have mysql-connector-java-8.0.22
// or relevant jars in build path of project
// Loading drivers
// This driver is the latest one
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?serverTimezone=UTC",
"root", "");
// Try block to check for exceptions
try {
// Set of statements to be checked
}
// Catch block 1
catch (SQLException s) {
// Display message when SQLException is
// encountered
System.out.println(
"SQL statement is not executed!");
}
}
catch (Exception e) {
// In case of general Exception
// print and display the line number where the
// exception occurred
e.printStackTrace();
}
finally {
// Finally for all cases indirectly closing the
// connections & making the resultset and
// connection object to null
res = null;
con = null;
}
}
}
XML
org.springframework.boot
spring-boot-starter-data-mongodb
XML
org.mongodb
mongodb-driver
3.6.3
XML
dependencies {
compile 'org.mongodb:mongodb-driver:3.2.2'
}
输出:
案例 1:在上面的代码中,我们使用的是 com.mysql.cj.jdbc.Driver,在这种情况下,如果我们没有 mysql-connector-java-8.0.22.jar,那么我们将得到 ClassNotFoundException。
情况 2:因此,将 jar 保留在构建路径中,如下所示。
Note: Similarly for any database connectivity, we need to have the respective jars for connecting to that database. The list of database driver jars required by java to overcome ClassNotFoundException is given below in a tabular format
Database | Command Line |
---|---|
MySQL | mysql-connector-java-8.0.22.jar |
MongoDB | mongo-java-driver-3.12.7.jar |
SQL Server | sqljdbc4.jar |
MYSQL | sqljdbc.jar |
Oracle | oracle.jdbc.driver.oracledriver |
Note:
- When we are developing Web based applications, the jars must be present in ‘WEB-INF/lib directory’.
- In Maven projects, jar dependency should be present in pom.xml
- Sample snippet of pom.xml for spring boot
示例 1使用 Spring Boot
XML
org.springframework.boot
spring-boot-starter-data-mongodb
示例 2不带弹簧靴
XML
org.mongodb
mongodb-driver
3.6.3
示例 3基于 Gradle 的依赖项 (MongoDB)
XML
dependencies {
compile 'org.mongodb:mongodb-driver:3.2.2'
}
类似地,可以通过这种方式指定其他 DB 驱动程序。这取决于项目性质,必须修复依赖项。对于普通类级别的项目,所有类,即父类、子类等都应该在类路径中可用。如果有错误,那么也不会创建 .class 文件,这会导致 ClassNotFoundException,因此为了让整个代码正常工作,首先应该通过修复依赖项来纠正错误。 IDE 对于克服此类场景非常有帮助,例如当程序抛出 ClassNotFoundException 时,它将向用户提供有关包含 jar 文件的必要性的建议(其中包含必要的功能,例如连接到数据库。