【问题标题】:Getting the following error - No suitable driver found for jdbc:postgresql://localhost: 5432/testDBMS出现以下错误 - 找不到适合 jdbc:postgresql://localhost:5432/testDBMS 的驱动程序
【发布时间】:2014-08-25 02:39:25
【问题描述】:

我收到一条错误消息,指出 java.sql.SQLException:没有找到适合的驱动程序
jdbc:postgresql://localhost: 5432/testDBMS

import java.sql.*;
import java.util.*;

public class JdbcPostgresqlConnection {

    public static void main(String[] args) {
    Connection conn3 = null;

    try {
        String dbURL3 = "jdbc:postgresql://localhost:5432/testDBMS";
        Properties parameters = new Properties();
            parameters.put("user", "pgmrHere");
            parameters.put("password", "111111");
        conn3 = DriverManager.getConnection(dbURL3, parameters);
    }
    catch (SQLException ex) { ex.printStackTrace(); }
  }
}

【问题讨论】:

  • 您的类路径中有 PostgreSQL JDBC 驱动程序吗?
  • JAVA 版本是 jdk1.7.0_45,PostgreSQL 是 9.3 Build 1102, - 在 JAVA BIN、JAVA LIB 和 POSTGRESQL LIB 文件夹中是 postgresql-9.3-1102.jdbc4.jar 和 postgresql-9.3-1102 .jdbc41.jar,-所有 JAR 文件夹都在 CLASSPATH 中,错误是 - C:\AZ_Fantasy5>java -cp。 JdbcPostgresqlConnection java.sql.SQLException: 找不到适合 jdbc:postgresql://localhost:5432/testDBMS 的驱动程序
  • jar 文件在我的类路径中 - C:\Documents and Settings\ckemp>echo %CLASSPATH% C:\Program Files\Java\jdk1.7.0_45\lib;C:\Program Files\ Java\jdk1.7.0_45\bin;C:\P rogram Files\PostgreSQL\9.3\lib
  • 不,他们不是。因为您使用的是 java 的 -cp 选项,它将程序的类路径设置-cp 选项的值,因此忽略了 CLASSPATH 环境变量。永远不要使用全局 CLASSPATH。始终使用-cp 传递显式类路径。顺便说一句,即使您不使用 -cp,它们也不会在类路径中。查看您的类路径:它是否包含 .jar 文件?不,它没有。它只包含目录。

标签: java postgresql jdbc


【解决方案1】:
java -cp . JdbcPostgresqlConnection

因此,很明显,类路径中唯一的内容是当前目录 (.)。 postgresql 驱动程序 jar 不是。您需要将其添加到类路径中:

java -cp .:/path/to/driver.jar JdbcPostgresqlConnection

在 Linux/MacOS 上,或

java -cp .;c:\path\to\driver.jar JdbcPostgresqlConnection

在 Windows 上。

【讨论】:

  • 建议的结果 - C:\AZ_Fantasy5> java -cp .;C:\Program Files\PostgreSQL\9.3\lib\postgresql-9.3-110 2.jdbc4.jar JdbcPostgresqlConnection Error: could找不到或加载主类 Files\PostgreSQL\9.3\lib\postgresql-9.3 -1102.jdbc4.jar
  • 类路径在环境表中并通过%CLASSPATH% 命令验证
  • 阅读我在问题底部的评论。避免将罐子放在包含空格字符的目录中。或者用双引号将包含空格字符的路径括起来。
  • jar 文件夹 - C:\Program Files\PostgreSQL\9.3\lib
  • 是的那又怎样?你没看到它在“程序”和“文件”之间包含一个空格吗?用双引号将 jar 的路径括起来:"C:\Program Files\PostgreSQL\9.3\lib\postgresql-9.3-1102.jdbc4.jar",正如我刚刚告诉你的那样。
【解决方案2】:

编译的语法是 - java -cp .;"C:\Program Files\PostgreSQL\9.3\lib\postgresql-9.3-1102.jdbc4.jar" JdbcPostgresqlConnection。注意2件事; jar 规范和 jar 文件周围的引号不能位于名称中带有空格的文件夹中。在 *nix 系统上通常不会出现这种情况,但在 Windows 系统中经常会遇到这种情况。还要注意,当我将 jar 文件与 java 程序放在同一个文件夹中时,我可以消除双引号 - java -cp .;C:\AZ_Fantasy5\postgresql-9.3-1102.jdbc4.jar JdbcPostgresqlConnection。特别感谢 JB Nizet 指出这种情况。

【讨论】:

  • 天哪。它们可以位于包含空格的路径下。顺便说一句,你的例子表明它们是。 windows 命令提示符只希望这种包含空格的路径用双引号括起来,因为空格通常结束一个参数并开始一个新参数。为什么你回答自己的问题,而不是接受那些花时间帮助你的人的正确问题?
【解决方案3】:
As the error says java -cp . JdbcPostgresqlConnection java.sql.SQLException: 
No suitable driver found for jdbc:postgresql://localhost: 5432/testDBMS

这意味着您没有在类路径中包含 postgresql.jar

尝试像这样执行,我通过看到你的错误假设它是 Windows 操作系统

java -cp .;pathOfYourDriverjar/postgresql.jar JdbcPostgresqlConnection

【讨论】:

  • 您的建议结果 - C:\AZ_Fantasy5> C:\AZ_Fantasy5>java -cp .;C:\Program Files\PostgreSQL\9.3\lib\postgresql-9.3-110 2.jdbc4.jar JdbcPostgresqlConnection 错误:无法找到或加载主类 Files\PostgreSQL\9.3\lib\postgresql-9.3 -1102.jdbc4.jar
【解决方案4】:

您没有在代码中加载驱动程序吗?定义 jdbc.drivers 属性,将其设置为 org.postgresql.Driver 或将 Class.forName("org.postgresql.Driver") 添加到您的代码中。

【讨论】:

  • 我在复制代码时出错。 Class.forName("org.postgresql.Driver") 在代码中。错误仍然存​​在。
  • @CaseyKemp 您发布的代码没有提及我建议您添加的行
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 2022-09-26
  • 2018-11-30
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多