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 <path-to-derby.jar> <Program>
更准确地说:
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 的驱动程序