SQLException: 找不到适合 jdbc:derby://localhost:1527 的驱动程序

Posted

技术标签:

【中文标题】SQLException: 找不到适合 jdbc:derby://localhost:1527 的驱动程序【英文标题】:SQLException: No suitable driver found for jdbc:derby://localhost:1527 【发布时间】:2010-09-28 18:46:05 【问题描述】:

我在 Netbeans 中收到此错误:

java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/

这是怎么引起的,我该如何解决?

【问题讨论】:

The infamous java.sql.SQLException: No suitable driver found的可能重复 【参考方案1】:

java.sql.SQLException: 找不到适合 jdbc:derby://localhost:1527/ 的驱动程序

这个异常有两个原因:

驱动程序未加载。 JDBC URL 格式不正确。

在您的情况下,我希望在连接字符串的末尾看到一个 数据库名称。例如(如果您希望在数据库不存在时创建数据库,请使用create=true):

jdbc:derby://localhost:1527/dbname;create=true

默认情况下,在启动网络服务器的目录中创建数据库。但您也可以指定数据库位置的绝对路径:

jdbc:derby://localhost:1527//home/pascal/derbyDBs/dbname;create=true

为了以防万一,请检查 derbyclient.jar 是否在类路径中,并且在服务器模式下工作时您正在加载适当的驱动程序 org.apache.derby.jdbc.ClientDriver

【讨论】:

【参考方案2】:

注意:您可以从here下载。

如果找不到,那么

    在项目选择选项卡中找到您的项目

    右键单击“库”

    点击“添加 JAR/文件夹...”

    选择“derbyclient.jar”

    单击“打开”,然后您将在“库”下看到“derbyclient.jar”

确保您的 URL、用户名、密码正确,然后运行您的代码:)

【讨论】:

【参考方案3】:

对我来说

DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());

帮助。这样一来,DriveManager 确实知道了 derby EmbeddedDriver。也许分配一个新的 EmbeddedDriver 很重,但另一方面,Class.forName 需要我不太喜欢的 try/catch/doSomethingIntelligentWithException。

【讨论】:

【参考方案4】:

JDBC DriverManager 找不到任何适合给定连接 URL 的 Driver。在连接数据库之前根本没有加载 JDBC 驱动程序,或者连接 URL 错误。由于连接 URL 看起来不错,我敢打赌根本没有加载驱动程序。在连接数据库之前,您需要在应用程序启动期间加载驱动程序。对于 Apache Derby,驱动程序类名称为 org.apache.derby.jdbc.ClientDriver。所以:

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

【讨论】:

其实我认为他们使用的是ClientDriver,而不是EmbeddedDriver,基于连接URL。所以应该是org.apache.derby.jdbc.ClientDriver。 为我的联网 derby 实例切换到 derbyclient.jar 而不是 derby.jar 也是我的问题。【参考方案5】:

我在 Netbeans 上编写 Java 应用程序时遇到了同样的问题。解决方法如下:

    在项目选择选项卡中找到您的项目

    右键单击“库”

    点击“添加 JAR/文件夹...”

    选择“derbyclient.jar”

    单击“打开”,然后您将在“库”下看到“derbyclient.jar”

    确保您的 URL、用户名、密码正确,然后运行您的代码:)

【讨论】:

【参考方案6】:

如果您使用嵌入式 Derby,您的类路径中需要 Derby.jar。

【讨论】:

【参考方案7】:

问题已得到解答,但提供了一个命令行来说明。当我尝试尽可能简单的测试以连接到网络模式 derby 时,这对我有用。

应用程序中加载的驱动程序:Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();

连接 URL 为:“jdbc:derby://localhost:1527/myDB;create=true”

我使用 java -classpath derbyclient.jar: 运行我的应用程序。我的AppClass

【讨论】:

【参考方案8】:

我通过将库添加到项目下方的库控制台解决了这个问题:

右击然后添加库 添加 JAVA DB 驱动程序。

我的项目正在运行!

【讨论】:

【参考方案9】:

我也面临同样的问题。在使用连接 URL 和用户凭据获取连接之前,我缺少 DriverManager.registerDriver() 调用。

在 Linux 上修复如下:

DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
connection = DriverManager.getConnection("jdbc:derby://localhost:1527//tmp/Test/DB_Name", user, pass);

对于 Windows:

DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
connection = DriverManager.getConnection("jdbc:derby://localhost:1527/C:/Users/Test/DB_Name", user, pass);

【讨论】:

【参考方案10】:

也有可能在 persistence.xml 中使用 EmbeddedDriver 而 jdbc url 指向 Derby 服务器。在这种情况下,只需将 url 更改为指向数据库路径即可。

【讨论】:

【参考方案11】:

如果创建了数据库并且您已经开始连接到数据库,那么您只需要添加驱动程序 jar。在项目窗口中,右键单击库文件夹,转到 c:programsfiles\sun\javadb\lib\derbyclient.jar。加载文件,你应该可以运行了。

一切顺利

【讨论】:

【参考方案12】:

我尝试了该线程中提到的所有内容,只有 .registerDriver() 对我有用。这就是我的部分代码现在的样子:

DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
connection = DriverManager.getConnection(url, user, pass);

请注意,问题不在嵌入式 Derby 中。

【讨论】:

【参考方案13】:

如果 Java DB 服务器尚未启动,您也会得到同样的错误。

【讨论】:

【参考方案14】:

您可能无法启动 Derby 服务器。 一旦 derby 服务器启动,它就会开始监听默认端口 1527。

启动脚本如下:

窗户:

    <DERBY_INSTALLATION_DIRECTORY>/bin/startNetworkServer.bat

Linux:

    <DERBY_INSTALLATION_DIRECTORY>/bin/startNetworkServer

【讨论】:

【参考方案15】:

当连接字符串的语法无效时会发生此错误。

您可以将连接字符串用作

'jdbc:derby:MyDbTest;create=true'

您可以在命令提示符下使用以下命令,以下命令成功创建了一个名为MyDbTest的新数据库:

connect 'jdbc:derby:MyDbTest;create=true';

【讨论】:

【参考方案16】:

我刚刚遇到了这个问题,尝试了以上所有建议,但仍然失败。无需重复上面的建议,以下是我(您)可能遗漏的内容: 如果您使用的是 maven,可能会说明依赖关系,即:

<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.10.1.1</version>

请注意版本。它必须与您正在运行的服务器实例兼容。

我通过放弃提供的 maven 依赖项并从“%JAVA_HOME%\db\lib”手动添加外部 jar 解决了我的问题,这与我正在运行的服务器的源相同。在这种情况下,我正在使用我的 Local 进行测试。

因此,如果您正在使用远程服务器实例进行测试,请查找服务器包附带的 derbyclient.jar。

【讨论】:

【参考方案17】:

遇到了同样的问题。我正在做类似的事情:

connect 'jdbc:derby://localhost:1527/~/databases/db1'

用绝对路径替换路径解决了这个问题:

connect 'jdbc:derby://localhost:1527//Users/ayush99/databases/db1'.

总结:避免在现有数据库的路径中使用~ 或任何此类变量。

【讨论】:

【参考方案18】:

有同样的问题,通过使用定义 derby.jar 位置的类路径运行来解决。

java -cp &lt;path-to-derby.jar&gt; &lt;Program&gt;

更准确地说:

java -cp "lib/*:." Program

其中:. 包括当前目录。 lib/* 确实包含 jar 扩展名 (lib/*.jar)。

【讨论】:

【参考方案19】:

我使用了上述答案,但没有任何效果。对我有用的是将依赖项放入项目中,就像上面所说的那样。

然后进入依赖项文件夹,右键单击依赖项derbyshared.jar 和derbyclient.jar 并“添加本地源”。将这两个依赖项与 derby 文件夹中的本地 jar 文件连接起来,然后就完成了。也许只是 Netbeans 的问题

【讨论】:

以上是关于SQLException: 找不到适合 jdbc:derby://localhost:1527 的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

SQLException: 找不到适合 jdbc:mysql://localhost:3306/dbname 的驱动程序

java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序

java.sql.SQLException:找不到适合 jdbc 的驱动程序:mysql://localhost:3306/dbname [重复]

java.sql.SQLException: 找不到适合 jdbc:sqlserver 的驱动程序... (intellij, maven)

java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/sushi 的驱动程序

HHH000231:模式导出不成功:java.sql.SQLException:找不到适合 jdbc:postgresql 的驱动程序