【问题标题】:Project JAR unable to access Derby Driver项目 JAR 无法访问 Derby 驱动程序
【发布时间】:2019-07-10 13:43:53
【问题描述】:

我正在处理一个 Java 项目,我们希望使用一个嵌入式数据库,使用 JDBC 进行连接,并使用 Derby 作为数据库。这是一个部署到可执行 JAR 的 Maven 项目。

我已将 Derby 作为对项目的依赖项。 我正在使用 Java 1.8、Maven 3.8.0 和 Derby 10.8.3.0。

POM.xml

<!-- Derby for database connection -->
<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derby</artifactId>
  <version>10.8.3.0</version>
</dependency>

App.java

public class App {

public static void main(String[] args) {
    JOptionPane.showMessageDialog(null, "Hello World.");


    SampleDB sdb = new SampleDB();
    try {
        sdb.connectionToDerby();
        sdb.sampleDBUsabe();
    } catch (SQLException sqle) {
        System.out.println(sqle);
    }
}
}

SampleDB.java

public class SampleDB {
private Connection conn;

public void connectionToDerby() throws SQLException {
    String dbURL = "jdbc:derby:sampledb;create=true";
    conn = DriverManager.getConnection(dbURL);
}

public void sampleDBUsabe() throws SQLException {
    Statement stmt = conn.createStatement();

    //Create Table
    stmt.execute("Create Table USERS (id int primary key, name varchar(30))");
...
}

当我执行生成的 .JAR 文件时出现错误:

$ java -jar target/puzzle.game-0.0.1-SNAPSHOT.jar
java.sql.SQLException: No suitable driver found for jdbc:derby:sampledb;create=true

我怀疑这是因为 Derby 驱动程序不是我的类路径的一部分。有没有办法使用 maven 或 settings.xml 文件来做到这一点,以便在用户运行 mvn install 目标时自动发生这种情况?

【问题讨论】:

  • 是的,您的问题是 CLASSPATH 问题。是的,derby.jar 旨在嵌入到您的应用程序中。顺便说一句,Derby 10.8 已经很老了。请考虑切换到更新的 Derby 10.14。

标签: java maven jdbc derby embedded-database


【解决方案1】:

查看此问题的答案:Building a fat jar using maven。您需要使用 maven 程序集插件来创建所谓的 fat/uber jar。

【讨论】:

    【解决方案2】:

    当您启动应用程序时,您的类路径中需要 derby-10.8.3.0.jar。

    java -cp derby-10.8.3.0.jar;target/puzzle.game-0.0.1-SNAPSHOT.jar App
    

    类路径分隔符取决于操作系统。您可能需要对此进行调整。

    正如 Bryan Pendleton 所说,您应该使用当前的 Derby 版本。

    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <version>10.14.2.0</version>
    </dependency>
    

    【讨论】:

    • 当我尝试这个时,我得到以下输出:java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriverjava.sql.SQLException: No suitable driver found for jdbc:derby:sampledb;create=true
    • 请检查您的类路径。如果您的 jar 不包含作为 fat jar 的所有依赖项,则必须将 derby jar 添加到您的类路径中。
    • Class.forName 在 Derby 中是可选的。这里的问题在于用户的 CLASSPATH。
    • 您链接到的手册页已有近 15 年的历史。甚至 Derby 10.8 也有将近十年的历史了。
    • @BryanPendleton 会的!谢谢!
    猜你喜欢
    • 2018-10-11
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2019-01-27
    相关资源
    最近更新 更多