Java Project JAR无法访问Derby驱动程序
我正在从事一个Java项目,我们希望使用一个嵌入式数据库,使用JDBC进行连接,使用Derby作为数据库。这是一个maven项目,它部署到一个可执行JAR 我已经将Derby作为项目的依赖项。 我使用的是Java1.8、Maven 3.8.0和Derby 10.8.3.0 POM.xmlJava Project JAR无法访问Derby驱动程序,java,maven,jdbc,derby,embedded-database,Java,Maven,Jdbc,Derby,Embedded Database,我正在从事一个Java项目,我们希望使用一个嵌入式数据库,使用JDBC进行连接,使用Derby作为数据库。这是一个maven项目,它部署到一个可执行JAR 我已经将Derby作为项目的依赖项。 我使用的是Java1.8、Maven 3.8.0和Derby 10.8.3.0 POM.xml <!-- Derby for database connection --> <dependency> <groupId>org.apache.derby</gro
<!-- Derby for database connection -->
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.8.3.0</version>
</dependency>
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安装目标时自动实现这一点?启动应用程序时,类路径中需要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>
org.apache.derby
德比
10.14.2.0
查看此问题的答案:。您需要使用maven assembly插件来创建所谓的fat/uber jar。当我尝试此操作时,我得到了以下输出:java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver
和java.sql.SQLException:未找到适合jdbc的驱动程序:derby:sampledb;create=true
请检查您的类路径。如果您的jar不能作为胖jar包含所有依赖项,则必须将derby jar添加到类路径中。这里的问题是用户的类路径。你链接到的手册页面已经有将近15年的历史了。甚至德比10.8也有将近十年的历史了。@BryanPendleton会的!非常感谢。是的,您的问题是类路径问题。是的,derby.jar被设计为嵌入到您的应用程序中。顺便说一下,德比10.8已经很老了。请考虑切换到德比10.14,这是非常新的。
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.14.2.0</version>
</dependency>