Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Maven的Java8中找不到适合jdbc的驱动程序_Java_Maven_Jdbc_Firebird_Jaybird - Fatal编程技术网

在使用Maven的Java8中找不到适合jdbc的驱动程序

在使用Maven的Java8中找不到适合jdbc的驱动程序,java,maven,jdbc,firebird,jaybird,Java,Maven,Jdbc,Firebird,Jaybird,我有一个Maven控制台应用程序,使用JDBC、FirebirdSQL和Java 8,根据规范,不需要再添加类注册,所以行class.forNameorg.FirebirdSQL.JDBC.FBDriver;但是当我运行这个项目时,我得到了一个错误:没有找到适合jdbc:fi的驱动程序rebirdsql://localhost/database,但如果我取消对该行的注释,它就可以正常工作 奇怪的是,如果我使用一个简单的控制台项目w/o使用Maven,它会与规范中所说的注释行一起工作,那么问题是:

我有一个Maven控制台应用程序,使用JDBC、FirebirdSQL和Java 8,根据规范,不需要再添加类注册,所以行class.forNameorg.FirebirdSQL.JDBC.FBDriver;但是当我运行这个项目时,我得到了一个错误:没有找到适合jdbc:fi的驱动程序rebirdsql://localhost/database,但如果我取消对该行的注释,它就可以正常工作


奇怪的是,如果我使用一个简单的控制台项目w/o使用Maven,它会与规范中所说的注释行一起工作,那么问题是:有没有一种方法可以让Maven也对类注册行进行注释?

看起来您使用的是旧版本的Jaybird FirebirdSQL JDBC驱动程序。版本2.2及更高版本实现JDBC 4.0规范,它不需要Class.forName语法

由于Mustang中包含的Java SE服务提供程序机制,Java开发人员不再需要使用Class.forName之类的代码显式加载JDBC驱动程序来注册JDBC驱动程序。DriverManager类通过在调用DriverManager.getConnection方法时自动定位合适的驱动程序来解决此问题

因此,升级下面的Jaybird JDBC驱动程序链接,只需省去Class.forName方法。它是遗留的,JDBC驱动程序JDBC 4.0及以上版本不需要它

根据Jaybird文档,您应该在POM中使用以下内容:

<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdkXX</artifactId>
<version>2.2.9</version>
artifactId取决于您的目标Java版本:jaybird-jdk18、jaybird-jdk17或jaybird-jdk16
看起来您使用的是旧版本的Jaybird FirebirdSQL JDBC驱动程序。版本2.2及更高版本实现JDBC 4.0规范,它不需要Class.forName语法

由于Mustang中包含的Java SE服务提供程序机制,Java开发人员不再需要使用Class.forName之类的代码显式加载JDBC驱动程序来注册JDBC驱动程序。DriverManager类通过在调用DriverManager.getConnection方法时自动定位合适的驱动程序来解决此问题

因此,升级下面的Jaybird JDBC驱动程序链接,只需省去Class.forName方法。它是遗留的,JDBC驱动程序JDBC 4.0及以上版本不需要它

根据Jaybird文档,您应该在POM中使用以下内容:

<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdkXX</artifactId>
<version>2.2.9</version>
artifactId取决于您的目标Java版本:jaybird-jdk18、jaybird-jdk17或jaybird-jdk16
旧的JDBC驱动程序不使用新的JavaServiceLoader框架。这意味着类加载器不注册JDBC服务提供程序,因为META-INF/services/java.sql.Driver文件中的钩子不存在,因为该文件不退出

注释掉的代码行有一个静态块,它将在创建第一个实例时运行,该静态块的内容将JDBC驱动程序注册到DriverManager中。这是一种比较老的方法,也是为什么你需要那条线才能工作的原因


基本上,您正在尝试对旧代码使用新技术。获取一个新的JAR文件(如果可用的话),它有可能与新技术一起工作。

旧的JDBC驱动程序不使用新的Java ServiceLoader框架。这意味着类加载器不注册JDBC服务提供程序,因为META-INF/services/java.sql.Driver文件中的钩子不存在,因为该文件不退出

注释掉的代码行有一个静态块,它将在创建第一个实例时运行,该静态块的内容将JDBC驱动程序注册到DriverManager中。这是一种比较老的方法,也是为什么你需要那条线才能工作的原因


基本上,您正在尝试对旧代码使用新技术。获取一个新的JAR文件(如果可用的话),它有可能与新技术一起工作。

maven项目真的使用JDK 8吗?acdcjunior:我在POM文件中指定了java版本,如下所示:org.apache.maven.plugins maven编译器插件3.1 1.81.8是的,这是正确的…您使用的是哪个版本的Jaybird?maven项目真的使用JDK 8吗?acdcjunior:我在POM文件中指定了java版本,如下所示:org.apache.maven.plugins maven compiler plugin 3.1 1.8 1.8是的,那是正确的…你用的是哪个版本的Jaybird?