gpt4 book ai didi

java - 为什么从生成的 jar 中找不到 jdbc 驱动程序?

转载 作者:行者123 更新时间:2023-11-29 14:15:26 25 4
gpt4 key购买 nike

<分区>

我有一个运行良好的 JAVA SE 项目。当我尝试将它作为 jar 在外部使用时出现问题。

我正在使用 Eclipse Oxygen。正如您在我的 pom 中所见,我的 JAVA SE 项目使用 JDBC4.2。 Oracle doc状态:

"In previous versions of JDBC, to obtain a connection, you first had to initialize your JDBC driver by calling the method Class.forName."

另外:

Any JDBC 4.0 drivers that are found in your class path are automatically loaded. (However, you must manually load any drivers prior to JDBC 4.0 with the method Class.forName.)

因此,我不需要在 DBConnection 类中编写 Class.forname(...)(见下文)。

当我在我的项目中使用 DBConnection 时,它工作正常,但是,如果我创建一个 jar 并尝试将其导入另一个项目,我会收到以下异常:“找不到适合 jdbc 的驱动程序:postgresql://host :端口/数据库名称”。以下是我创建 jar 的步骤:

  1. mvn 全新安装
  2. 在一个新的空的干净工作区中创建新的 java 项目 (TestProject)
  3. 用main创建一个测试类
  4. 从主调用一个使用 DBConnection 的类
  5. 我没有编译问题(jar 中的所有类都已正确加载)
  6. 当我运行 main 时,我的 DBConnection 类的“getConnection”抛出以下异常:“找不到适合 jdbc:postgresql://host:port/dbName 的驱动程序”
  7. 如果我右键单击 TestProject-> 配置 -> 转换为 maven 项目,然后添加 postgres 驱动程序依赖项,一切正常!!!

PostgreSQL 驱动程序不应该已经存在于我的 jar 中吗?为什么要在用户项目的依赖中添加?

下面是DBConnection类的代码:

package generic.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBConnection {

private static final String FILE_NAME = "db";
private static final String URL = "url";
private static final String USER = "user";
private static final String PASSWORD = "password";

private static Connection conn;

private DBConnection(){

}

public static synchronized Connection getConnection() throws SQLException, ClassNotFoundException, IOException {

if(DBConnection.conn == null || DBConnection.conn.isClosed()){
Properties props = PropertiesReader.readPropertyFile(FILE_NAME);

String url = props.getProperty(URL);
String user = props.getProperty(USER);
String password = props.getProperty(PASSWORD);

Connection conn = DriverManager.getConnection(url, user, password);

DBConnection.conn = conn;
}

return DBConnection.conn;
}

}

以下是我的pom:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupid</groupId>
<artifactId>artifactid</artifactId>
<version>1.0</version>
<properties>
<skipTests>true</skipTests>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.2</version>
</dependency>

</dependencies>
</project>

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com