【问题标题】:JDBC Derby driver not found找不到 JDBC Derby 驱动程序
【发布时间】:2013-03-05 18:04:19
【问题描述】:

我在 http://docs.oracle.com/javase/tutorial/jdbc/basics/gettingstarted.html 上学习了 JDBC 教程,并成功地构建和创建了我自己的 JDBC 数据库,没有大惊小怪。但是现在当我尝试从 java 应用程序连接到数据库时,我收到了异常:

java.sql.SQLException: 找不到适合 jdbc:derby:db 的驱动程序 目录

然后在尝试手动指定 JDBC 驱动程序时使用:

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

我收到以下异常错误:

java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver

我很肯定该驱动程序在加载时应该没有问题,因为这是教程中指定的驱动程序,并且使用该驱动程序创建数据库没有问题。我尝试在连接语句末尾添加属性“;create=true”以尝试创建一个全新的数据库,但我仍然收到相同的异常错误。

请在下面查看我的应用程序代码。 任何帮助都会很棒:)。

package com.ddg;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class SQLConnect
{
    Connection Conn = null;
    String URL;
    String Username;
    String Password;

    public SQLConnect()
    {
        try
        {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        }
        catch (ClassNotFoundException e)
        {
            System.out.println(e.toString());
        }
        URL = "jdbc:derby:*directory name*";

        System.out.println("Created SQL Connect");
    }

    public void CreateConnection()
    {
        try
        {
            Conn = DriverManager.getConnection(URL);
            System.out.println("Successfully Connected");
        }
        catch (SQLException e)
        {
            System.out.println(e.toString());
        }
    }

    public void CloseConnection()
    {
        try
        {
            this.Conn.close();
            System.out.println("Connection successfully closed");
        }
        catch (SQLException e)
        {
            System.out.println(e.toString());
        }
    }

    public static void main(String args[])
    {
        SQLConnect sql = new SQLConnect();
        sql.CreateConnection();
        sql.CloseConnection();
    }
}

【问题讨论】:

  • 如何指定类路径?
  • 你能试试"jdbc:derby:" + dbName + ";create=true"吗?
  • 将 derby.jar 添加到您的类路径中。
  • @lhuang 我刚刚尝试了您的第一个建议,并收到了关于找不到驱动程序的相同错误消息。关于您的第二个建议,如何将其添加到我的项目类路径中?我已下载 Derby 库文件并添加到我的 Windows 环境变量路径中。
  • 如果您通过命令行运行 Java,您应该将 JAR 添加到 CLASSPATH 环境,而不是 Path。如果您使用的是eclipse,请参考wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-(Java)

标签: java sql database jdbc


【解决方案1】:

java.sql.SQLException: 找不到适合 jdbc:derby:db 的驱动程序 目录

所以你的错误可能是由以下原因引起的:

驱动程序未正确加载或您的URL 格式错误。所以首先你需要确保你的*.jar 在类路径中。看看吧。

还可以尝试将您的URL 更改为:

jdbc:derby://<path>/<databasename>;create=true

create=true 将确保如果不存在 db 将被创建。

更新:

也看看这个标题:SQLException: No suitable driver found for jdbc:derby://localhost:1527

【讨论】:

  • 感谢 Sajmon 的建议。事实证明,我在引用的库(类路径)中缺少所需的 derby 文件。添加它们并能够创建一个新数据库,甚至链接到我的旧数据库。现在只需要弄清楚如何使用外部IP地址链接到数据库哈哈:)
【解决方案2】:

您说您已按照教程进行操作。在本教程中,您必须安装 JDBC 驱动程序。

安装 JDBC 驱动程序通常包括将驱动程序复制到 您的计算机,然后将其位置添加到您的类路径中。

安装驱动后运行

java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver

这只有在你弄错了正确的潜水员时才有可能。

你用过

org.apache.derby.jdbc.EmbeddedDriver

加载驱动

但应该使用

org.apache.derby.jdbc.ClientDriver

【讨论】:

  • 你怎么知道 Ice Phoenix 正在使用 Derby 服务器
  • 因为ClassNotFoundException用于嵌入式驱动,所以不使用嵌入式。
  • 但如果他使用嵌入式数据库必须使用嵌入式驱动程序。如果他使用的是服务器连接,他必须首先启动他的帖子没有提到的服务器。
  • @a_horse_with_no_name 如果更改驱动程序可以解决问题,那么我的任务就完成了。
  • 感谢您的建议,但如上所述,事实证明就像不引用驱动程序一样简单 :)。非常感谢您对此的意见,谢谢。
【解决方案3】:

有关详细信息,请参阅https://db.apache.org/derby/papers/DerbyTut/install_software.html#derby_configure 上的“设置 DERBY_INSTALL”和“配置嵌入式 Derby”部分。

Derby 是 JavaSE 安装的一部分,我设置了环境变量 DERBY_HOME 而不是链接中显示的 DERBY_INSTALL

C:\> set DERBY_HOME=c:\Program Files\Java\jdk1.8.0_60\db
C:\> set CLASSPATH=%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbytools.jar;.
C:\> cd %DERBY_INSTALL%\bin
c:\Program Files\Java\jdk1.8.0_60\db\bin> setEmbeddedCP.bat

【讨论】:

    【解决方案4】:

    如果您遇到此类错误

    java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver
    

    如果您使用的是netbeans,那么您必须按照以下步骤操作:

    1. 右键单击库
    2. 选择添加库选项并从库列表中选择“Java DB Driver”

    【讨论】:

      【解决方案5】:

      Java JDK 自带

      org.apache.derby.jdbc.EmbeddedDriver
      org.apache.derby.jdbc.ClientDriver
      

      在 Eclipse 中,将以下 jars 添加到使用的 JRE(JDK) 或显式添加到您的项目中。

      [JDK]db/lib/derby.jar (EmbeddedDriver)
      [JDK]db/lib/derbyclient.jar (ClientDriver)
      

      对于 runtine,您需要为您的 java 应用程序提供适当的 jar。

      【讨论】:

        【解决方案6】:

        我已经将任何需要的 jdbc 驱动程序放在例如 jre\lib\ext 目录中。 在我的系统上是:X:\Java\jre1.8.0_181\lib\ext 希望对您有所帮助。

        【讨论】:

          【解决方案7】:

          我在使用 ClientDriver 时遇到了 java.lang.ClassNotFoundException。 我使用了最新的驱动程序二进制文件,这是错误的。

          当时最新的Driver二进制是10.15.1.3,就在这里:Apache Site

          我使用的是 Java 8,我使用的是 Hibernate 5.4.2.Final。 然而,驱动程序是针对 Java 9 编译的!

          【讨论】:

            【解决方案8】:

            我最近发现如果你使用jlink创建运行时,你可能需要包含额外的jdk模块来允许驱动实例化。

            就我而言,我需要在图像中包含 java.namingjava.management 模块。

            【讨论】:

              【解决方案9】:

              所以我遇到了这个错误,解决这个问题是一项非常烦人且忙碌的任务。但最后,我设法找到了一个完美的视频,让我从一开始就安装了 derby,并完美地指导了我如何安装它。但是,视频之后还有一步。

              如果您已经设置了 JavaFX 包并且能够正常运行程序,请观看此视频,但面临
              “java.sql.SQLException:没有为 jdbc:derby://localhost:1527/DBNAME;create=true 找到合适的驱动程序”尝试使用数据库运行时的问题。

              Link to the tutorial

              现在设置完成后,您现在可以启动/停止数据库(通过服务选项卡),并且可以连接数据库。但是在尝试编辑数据库时问题仍然存在。

              要纠正此问题,请按照以下步骤操作 ->

              右键点击项目--->属性--->--->点击类路径中的'+'---> 添加 jar/文件夹 ---> 进入 derby 内的 lib 文件夹并选择 derbyclient.jar

              版本

              JAVA - 17.0.1,Netbeans - 12.6

              希望对您有所帮助, 谢谢:)

              【讨论】:

                【解决方案10】:

                这似乎是一个古老的问题,并导致我和该线程中的其他人感到非常沮丧。尽管在 Eclipse IDE 测试工具中成功运行了测试,但如果通过网络连接调用,应用程序将无法加载嵌入式驱动程序。

                在几乎没有证据的情况下,我建议问题出在 Derby 以及它在 classpath 中搜索驱动程序的方式以及延迟导致并发问题,因为它在搜索时无法及时找到驱动程序在其工作空间之外。我已经多次重复这个测试,只有在程序的工作区中创建一个SharedLibraries 项目,然后将这个共享库添加到libraries classpath,如屏幕截图所示,才能实现一致性。

                您可以使用Project-&gt;Properties-&gt;Java Build Path-&gt;Libraries 来执行此操作。这种方法的唯一缺点是您不知道库的来源及其版本,但是如果这是一个问题,只需将版本号添加到库文件即可解决。

                【讨论】:

                  猜你喜欢
                  • 2017-12-20
                  • 2015-06-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-02-05
                  • 2016-08-09
                  相关资源
                  最近更新 更多