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