【问题标题】:Java connect with JDBC to Postgres - SQLExceptionJava 通过 JDBC 连接到 Postgres - SQLException
【发布时间】:2019-02-04 01:16:41
【问题描述】:

我正在尝试连接到 Postgres 数据库。我对此真的很陌生,并且已经阅读了论坛中的帖子。但我没有做到。

public void connect() {
    //Connection con = null;
    try {
        Class.forName("org.postgresql.Driver");

        Properties props = new Properties();
        props.setProperty("user", user);
        props.setProperty("password", password);
        props.setProperty("ssl","true");
        Connection conn = DriverManager.getConnection(url, props);
        //String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
        //Connection conn = DriverManager.getConnection(url);
        System.out.println("Erfolgreich verbunden!");
    }
    catch (Exception  e){
        e.printStackTrace();
        System.err.println(e.getClass().getName()+": "+e.getMessage());
        System.exit(0);
    }
}

编辑: 我更新了我的代码。 数据库部署到heroku。 它抛出错误:

java.sql.SQLException: No suitable driver found for jdbc:postgres://vuqmbekwlgohkw:******
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)
at com.company.Database.connect(Database.java:20) p
at com.company.Main.start(Main.java:16)
at com.company.Main.main(Main.java:25)
java.sql.SQLException: No suitable driver found for jdbc:postgres://vuqmbekwlgohkw:***************

【问题讨论】:

  • InitialContext 并按 JNDI 名称查找适用于应用程序服务器(JEE 技术),如果您不开发 JEE 应用程序,您应该简单地遵循 JDBC 连接示例,如下所示:jdbc.postgresql.org/documentation/80/connect.html
  • 谢谢,但这会导致错误:java.sql.SQLException: No suitable driver found for jdbc:postgres.
  • 你现在发布的代码没有抛出这个异常。不清楚你在问什么。
  • 只有你认为NoInitialContextExceptionSQLException 是一回事,其实不然。
  • 我在这里对每个人都一视同仁。

标签: java postgresql jdbc


【解决方案1】:

我认为您的问题是您的连接 URL 格式错误。

DriverManager.getConnection 抛出SQLException 时,消息包含传递给函数的确切url 值。在你的情况下,这看起来像 jdbc:postgres://vuqmbekwlgohkw:******

但显然这不是您使用的 URL。您已将部分 URL 替换为星号。这表明您认为 URL 的格式是:

jdbc:postgres://username:password@host:port/dbname

这似乎是 Heroku 在 DATABASE_URL 环境变量中提供的。您使用星号来阻止我们看到密码。

但是,PostgreSQL JDBC 驱动程序似乎不接受这种格式的 URL。当我尝试时,我也得到了“没有合适的驱动程序”错误。 According to the documentation,网址格式为:

jdbc:postgres://host:port/database

某些部分是可选的,但驱动程序似乎不支持将用户名或密码放在 URL 中。

通过使用文档中描述的 URL 格式并使用连接属性设置用户名和密码,我能够连接到 AWS PostgreSQL 实例。

【讨论】:

    【解决方案2】:

    你说你是新手,所以我要从痛苦的显而易见的开始,你的类路径中有驱动程序吗?

    这是您添加到项目中的 jar,您可以从 https://jdbc.postgresql.org/ 下载它

    否则我有一个对我有用的 url 示例,除了我没有完全使用 jdbc,它是一个 spring-boot 项目:

    jdbc:postgresql://ec2-174-99-88-88.compute-1.amazonaws.com:5432/asdfasdfsadf?sslmode=require
    

    您评论的 URL 中没有端口号,并且并非所有参数都受支持,就像 Willis 指出的那样。

    【讨论】:

    • 我认为他的类路径中有驱动程序,因为他报告说添加 Class.forName 没有任何作用。如果驱动程序不在类路径中,那么尝试获取对它的引用将引发异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2016-08-21
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多