找不到适合 jdbc:firebirdsql://localhost:3050 的驱动程序

No suitable driver found for jdbc:firebirdsql://localhost:3050

我使用 jaybird 依赖构建了一个 javafx maven 应用程序。 intelliJ 的每件事都很好。 当我导出 jar 文件时,我收到此消息:

No suitable driver found for jdbc:firebirdsql://localhost:3050...

这是 pom.xml 的依赖部分:

    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>16</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>16</version>
        </dependency>
        <dependency>
            <groupId>org.firebirdsql.jdbc</groupId>
            <artifactId>jaybird-jdk16</artifactId>
            <version>2.2.14</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.5.0</version>
        </dependency>
    </dependencies> 

解决方法是: 右键单击 jaybird 依赖项(如图所示),然后单击 Extract into output root 然后重建工件 jar。

发生此错误的正常原因是您的类路径上没有 Jaybird(Firebird JDBC 驱动程序)或其所需的依赖项之一,或者驱动程序未注册。驱动程序注册通常会自动进行,但您始终可以尝试使用 Class.forName("org.firebirdsql.jdbc.FBDriver") 显式地进行注册。如果失败,您将获得提供更多信息的堆栈跟踪。

鉴于您展示了一个包含 Jaybird(尽管是旧版本)的 Maven pom.xml,驱动程序在编译时存在。但是,根据您启动应用程序的方式,它可能不会出现在运行时类路径中。

有几种选择:

  1. 加载时显式指定驱动Java:

    java -cp yourapp.jar;jaybird-4.0.3.java8.jar;connector-api-1.5.jar your.class.Name
    

    此处,Jaybird 需要 jaybird-4.0.3.java8.jarconnector-api-1.5.jar 才能工作。

  2. 在您的 JAR manifestClass-Path 条目中列出所需的 JAR(jaybird-4.0.3.java8.jarconnector-api-1.5.jar):

    Class-Path: jaybird-4.0.3.java8.jar connector-api-1.5.jar
    

    这两个 jar 文件都需要与您的 JAR 位于同一目录中。然后您可以启动您的应用程序(假设还指定了 Main-Class 属性):

    java -jar yourapp.jar
    
  3. 创建一个胖(或超级)JAR,并确保 Jaybird 的所有 类 和资源 - 及其所需的依赖项 - 都包含在你的 JAR 中。

  4. (Web 应用程序)将驱动程序(和依赖项)包含在应用程序服务器的 libraries/modules 中(例如 Tomcat lib 文件夹),或者使确保驱动程序包含在 WAR 的 WEB-INF/lib 文件夹中(Maven WAR 插件会处理这个)。在最后一种情况下(WEB-INF/lib 中的驱动程序),有必要使用 Class.forName("org.firebirdsql.jdbc.FBDriver") 显式加载驱动程序以确保驱动程序已注册。