当前位置: 首页 > 知识库问答 >
问题:

Derby给出了ClassNotFoundException:org。阿帕奇。德比。jdbc。使用Maven时嵌入驱动程序

年嘉禧
2023-03-14

我看过以下主题,但它们没有发布我问题的解决方案:

  1. 爪哇。lang.ClassNotFoundException:org。阿帕奇。德比。jdbc。嵌入式驱动程序
  2. 未找到JDBC Derby驱动程序
  3. SQLException:未找到适合jdbc的驱动程序:derby://localhost:1527
  4. 类[org.apache.derby.jdbc.ClientDriver]未找到异常
  5. 找不到类[org.apache.derby.jdbc.ClientDriver]。尝试连接到db时
  6. ClassNotFoundException:org。阿帕奇。德比。jdbc。尝试将JPA与Derby一起使用时使用EmbeddedDriver

你好
在我的项目中,我正在使用Maven,我还想在嵌入式模式下使用Derby数据库。因此我更新了pom。xml文件由以下用户创建:

<dependencies>
    ...
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.12.1.1</version>
    </dependency>
</dependencies>

Maven成功下载了依赖项。在Maven依赖项下的Eclipse构建路径中可以看到它,如derby-10.12.1.1。罐子
然后我创建了测试类:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.derby.jdbc.EmbeddedDriver;

public class DerbyTest {
    public static void main (String...strings){
         try {
             DriverManager.registerDriver(new EmbeddedDriver());
            Connection conn = DriverManager.getConnection("jdbc:derby:test2;create=true");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这给了我下面的类NotFoundException

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/derby/jdbc/EmbeddedDriver
    at DerbyTest.main(DerbyTest.java:10)
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

问题是——为什么?该类位于生成路径中。Eclipse没有给我任何编译时错误警告——它在编写过程中看到该类。依赖项的作用域是compile。JVM在查找类时不应该有问题。另外,JVM与我正在使用的其他依赖项(jTest、Hibernate、SQLite)没有问题。

后脚本:我试图解决这个难题:

>

然后我创建了另一个新的Project2,其测试类与之前相同。我在本地存储库(C:\Users\User\.m2\repository\org\apache\derby\derby\10.12.1.1)中找到了Maven版本的Debry,并手动添加了derby-10.12.1.1。jar到新项目的构建路径。在运行一个程序后,我得到了与使用Maven完全相同的错误。

我使用手动下载的Derby(从点1.),并通过在我的主要项目中编辑pom.xml文件来创建外部存储库:

.

<repositories>
    <repository>
        <id>derby-repo</id>
        <url>file://C:/libs</url>
    </repository>
</repositories>

<dependencies>
    ...
    <dependency>
        <groupId>derbygroupid</groupId>
        <artifactId>derby</artifactId>
        <version>0.0.1</version>
    </dependency>
</dependencies>

Maven成功地在Eclipse的构建路径中的Maven依赖项下添加了一个依赖项derby-0.0.1。罐子运行一个程序后,成功地创建了数据库
这通常可以解决问题,但问题是,为什么Maven不能自己处理?

编辑:对于那些感兴趣的人。我暂时解决了使用旧版本的德比的问题:

<dependencies>
    ...
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.11.1.1</version>
    </dependency>
</dependencies> 

这个版本可以但我还是不知道为什么10.12.1.1不行

共有3个答案

冀弘厚
2023-03-14

我面临着同样的问题,通过恢复到10.11.1.1版本的驱动程序,一切都正常。

齐起运
2023-03-14

尽管我还不明白为什么会这样:自从Java1.6之后,您就可以调用DriverManager了。即使不手动注册驱动程序,getConnection()也会成功。尝试忽略创建EmbeddedDriver实例来注册驱动程序并只获取连接对象。我在调用类时遇到了相同的异常。forName(“org.apache.derby.jdbc.EmbeddedDriver”),并简单地将其删除。

但是,关闭Derby将注销驱动程序。所以如果你打算重新启动德比,这个技巧只会起一次作用,直到你关闭德比。在关机时传递“注销=false”将确保德比驱动程序在初始注册后没有被删除。

我正在使用相同Maven包的10.15.2.0,在我的pom中没有更多的derby包。xml。

邓俊材
2023-03-14

我也面临同样的问题,但我克服了。。。

因为我在intellij上工作,我去了

文件-

单击加号并选择JAR和dependencies

打开jdk的路径,并从中添加以下jar文件1。德比。罐子2。德比客户机。罐子3。德比网。罐子4。德比工具。罐子5。德比。罐子

单击应用。成功了!

对于Eclipse,试试这个。

 类似资料:
  • 无法连接。无法建立到jdbc的连接:derby://localhost:1527/sample使用组织。阿帕奇。德比。jdbc。ClientDriver(DERBY SQL错误:错误代码:40000,SQLSTATE:XJ040,SQLERRMC:无法使用类加载器sun.misc.Launcher启动数据库'sample'$AppClassLoader@1d44bcfa,有关详细信息,请参见下一个

  • 我正试图让我的Grails应用程序使用logback插件登录。根据文档说明,以下是我迄今为止所做的工作: 然后我运行了一个。当我运行一个时,我得到一个绝对巨大的堆栈跟踪,如下所示: 此外,在我的GGTS IDE中,添加到中的两个导入语句出现了编译器错误。听起来我的Grails应用程序中仍然有Log4j引用,并且运行将Log4j JAR从我的类路径中删除。这可能解释了堆栈跟踪。但这并不能解释为什么G

  • 我在Windows上的netbeans项目中使用Derby遇到了麻烦。我刚刚下载并配置了Derby,并将CLASSPATH变量设置为 当我运行命令时 一切都和预期的一样,我得到了输出 等等。 现在,当我运行一个直接从命令提示符使用derby的Java程序时,一切都运行得很好: 但当我尝试从Netbeans运行完全相同的程序时,我得到以下错误 为什么驱动程序在命令提示符下工作,而不是在NetBean

  • 我需要在Java中使用JDBC做一些简单的实验,我认为运行derby数据库应该是实现这一点的简单途径。 我已经安装了derby,并使用“ij”工具创建了一个表并将一些数据放入其中。我也可以用ij读回数据。 然而,当我试图使用实际的Java代码连接到此时,事情变得很糟糕。这是我尝试了几件事情的情况之一,每件事都以不同的方式失败,所以我希望你们都能原谅这有点模糊。但这些是我迄今为止尝试/失败的要点。

  • Apache Kafka:分布式消息传递系统 Apache Storm:实时消息处理 我们如何在实时数据管道中使用这两种技术来处理事件数据? 在实时数据管道方面,我觉得两者做的工作是一样的。如何在数据管道上同时使用这两种技术?

  • 填写我的Jasper报告时,我得到以下例外: 我已经添加了(https://search.maven.org/#search|ga | 1 | a:“commons javaflow”)——但这没有帮助。在哪里可以找到这门课? 编辑:重复问题标签的一条注释:这不是关于ClassNotFoundException的一般问题——这是一个关于Jasper Reports/Apache Commons J