📌  相关文章
📜  如何解决在Java中的Java .lang.ClassNotFoundException?

📅  最后修改于: 2022-05-13 01:55:16.833000             🧑  作者: Mango

如何解决在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 保留在构建路径中,如下所示。

Database Command Line
MySQLmysql-connector-java-8.0.22.jar
MongoDBmongo-java-driver-3.12.7.jar
SQL Serversqljdbc4.jar
MYSQLsqljdbc.jar
Oracleoracle.jdbc.driver.oracledriver

示例 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 文件的必要性的建议(其中包含必要的功能,例如连接到数据库。