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