Java ClassNotFound&;没有合适的司机,我哪里出错了?

Java ClassNotFound&;没有合适的司机,我哪里出错了?,java,mysql,mariadb,connection,Java,Mysql,Mariadb,Connection,我已经创建了一个在NetBeans上的IDE中可以完美工作的程序,但是每当我构建.jar文件时,数据库连接就会停止工作。我已经向MySQL连接器添加了类路径,并定义了Class.forName(“com.MySQL.jdbc.Driver”);还是没什么 try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/gea

我已经创建了一个在NetBeans上的IDE中可以完美工作的程序,但是每当我构建.jar文件时,数据库连接就会停止工作。我已经向MySQL连接器添加了类路径,并定义了Class.forName(“com.MySQL.jdbc.Driver”);还是没什么

try {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/gearheads";
        Connection conn = DriverManager.getConnection(url,"root","HellOnEarth202021");
        Statement stmt = conn.createStatement();
        ResultSet rs;
        String pid = txt_staffID.getText();
        rs = stmt.executeQuery("SELECT name,timeraccess FROM staff WHERE staffid = '"+pid+"'");
        while ( rs.next() ) {
            String timeraccess = rs.getString("timeraccess");
            String staffName = rs.getString("name");
            getLogin = staffName;
            System.out.println(staffName);
            System.out.println("Users Admin Level: " + timeraccess);
            if ( timeraccess.equals("1")) {
                this.dispose();
                new menu().setVisible(true);
                System.out.println("Access Granted");
            }else
                System.out.println("Access Restricted.");
        }
        conn.close();
    } catch (Exception e) {
        System.err.println("Got an exception! ");
        txt_staffID.setText(e.toString());
        System.err.println(e.getMessage());
    }
就目前而言,这将产生:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
其中取出Class.forName输出:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/gearheads
请帮帮我。此链接是我的库的屏幕截图

我的图书馆:


如果它在Netbeans中正确运行,那么MySQL驱动程序是正确的

您必须搜索Manifest文件(Manifest.MF),并且可能必须在您自己的JAR文件中取消保存驱动程序的内容

我现在就留下这个答案,但我会尽力收集细节,把它带回这里

我还使用NetBeans,当我生成JAR文件时,它已经在复制依赖库并生成正确的MANIFEST.MF

我最终得到了以下结构

MyProject\dist\lib\JdbcDriver.jar and MyProject\dist\MyProject.jar MyProject\dist\lib\JdbcDriver.jar 和 MyProject\dist\MyProject.jar 在MyProject.jar中,我有以下MANIFEST.MF:

Manifest-Version: 1.0 Ant-Version: Apache Ant 1.9.7 Created-By: 1.8.0_201-b09 (Oracle Corporation) Class-Path: lib/JdbcDriver.jar X-COMMENT: Main-Class will be added automatically by build Main-Class: myproject.MyMainClass 清单版本:1.0 Ant版本:ApacheAnt1.9.7 创建人:1.8.0_201-b09(Oracle公司) 类路径:lib/JdbcDriver.jar X注释:主类将由生成自动添加 主类:myproject.MyMainClass 请确认您正在将lib文件夹与JAR文件一起复制



最后一个解决方案(@Nick Media final comment):您必须在Build>Packaging Project Properties中检查“复制依赖库”。

我们不清楚您到底做错了什么,但您显然做错了什么:

  • 通常最好使用
    DriverManager.getConnection
    而不是
    Class.forName
    和特定的驱动程序类名。这是Oracle Java教程推荐的方法;看

  • 如果您是通过其类名加载驱动程序,请将
    com.mysql.jdbc.driver
    与mysql Connector/j5.x一起使用,将
    com.mysql.cj.jdbc.driver
    与mysql Connector/j8.x一起使用

  • 如果这是一个webapp,请确保相关的驱动程序JAR文件实际上在WAR文件中,并且/或者它被正确部署

  • 如果这是一个命令行应用程序,请确保在运行时类路径中包含驱动程序JAR。(特别是如果你想在IDE之外运行它),可以考虑创建一个包含所有应用程序依赖的阴影jar。(很难给出建议,因为您还没有告诉我们您是否正在使用Ant、Maven、Gradle等构建工具。)

  • 驱动程序实际上不需要是编译时依赖项,尽管这样做没有什么害处。(其危害在于,您可能会意外地将导入添加到应用程序的MySQL实现类中……并遇到问题。)


  • 您使用的是哪个版本的MySQL驱动程序?对于MySQL Connector/J 8.x,您使用的驱动程序类名不正确。我在哪里可以找到它?在您的项目/IDE中配置MySQL驱动程序库的地方。或者通过查看WAR file.MySQL驱动程序Java 5.1.23,但我也带来了MySQL 8.0.21.jar。我找到的每个教程都会不断调用
    com.MySQL.jdbc.Driver
    com.MySQL.cj.jdbc.Driver
    。我尝试了这两种方法,结果相同。驱动程序是用JDK的NetBeans 8.2预先打包的,但我不确定如何执行清单或取消对内容的存档。请告诉我tab Libraries>是如何运行的。我的是以下条目:编译源代码的类路径和编译源代码注意,如果您创建这样的可执行JAR,JVM需要始终能够找到相对于MyProject.jarYes位置的JdbcDriver.JAR!这就是为什么我要他确认他正在复制lib文件夹和主JAR文件…;-)@Nick Media,请告诉我构建>在项目属性中的打包情况如何。。。我的有一个签入“复制依赖库”,它是一个JFrame应用程序。当不构建时,它可以完美地工作,但只要我“清理并构建”,并运行packed.jar,它就会给出这些错误。我试着用
    com.mysql.jdbc.Driver
    com.mysql.cj.jdbc.Driver
    运行,它们在NetBeans本身运行良好,但同样,在.JAR构建时运行不好,因此驱动程序可以正常工作,只是在可分发的.JAR文件中找不到驱动程序。这就是问题所在。我不是NetBeans方面的专家,但是关于创建可执行JAR的方式有些不正确。