Project JAR无法访问Derby驱动程序

时间:2019-02-16 17:36:18

标签: java maven jdbc derby embedded-database

我正在一个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目标时自动发生这种情况?

2 个答案:

答案 0 :(得分:1)

启动应用程序时,您将在类路径中需要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>

答案 1 :(得分:1)

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