繁体   English   中英

如何从Java连接到我的Heroku PostgreSQL数据库

[英]How to connect to my Heroku PostgreSQL database from Java

我有一个Heroku PostgreSQL数据库,无法从Java连接到该数据库。 我尝试了不同的方法,但没有成功。

下面是我的Java代码:

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



public class MainConfig {

    public static void main(String[] args) {

     try{
         dataSource();
         System.out.println("conected");
     }
    catch(Exception ex){
        ex.printStackTrace();
    }
    }

    public static Connection dataSource() throws URISyntaxException, SQLException {

        String ConnectionString ="jdbc:postgresql://l********n:cPd7VRjIhNVWOrZ4uWEeZWKYqV@ec2-184-73-251-115.compute-1.amazonaws.com:5432/dac36a93ohuvsd";
        String username = "****";
        String password = "***";

        return DriverManager.getConnection(ConnectionString, username, password);
    }

}

我在控制台中得到的错误是:

> org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:233)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:144)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
    at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
    at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
    at org.postgresql.Driver.makeConnection(Driver.java:410)
    at org.postgresql.Driver.connect(Driver.java:280)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at MainConfig.dataSource(MainConfig.java:34)
    at MainConfig.main(MainConfig.java:14)
Caused by: java.net.UnknownHostException: lxlrnhejlzmyun:cPd7VRjIhNVWOrZ4uWEeZWKYqV@ec2-184-73-251-115.compute-1.amazonaws.com
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.postgresql.core.PGStream.<init>(PGStream.java:61)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:109)
    ... 12 more

我已将Java驱动程序postgresql-9.3-1102.jdbc41.jar添加到构建路径中

下面用错误消息描述了我尝试连接的另一种方法:

    import java.net.URI;
import java.net.URISyntaxException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;



public class MainConfig {

    public static void main(String[] args) {

     try{
         dataSource();
         System.out.println("conected");
     }
    catch(Exception ex){
        ex.printStackTrace();
    }
    }

    public static Connection dataSource() throws URISyntaxException, SQLException {
        URI dbUri = new URI(System.getenv("postgres://l**********n:cPd7VRjIhNVWOrZ4uWEeZWKYqV@ec2-184-73-251-115.compute-1.amazonaws.com:5432/dac36a93ohuvsd"));

        String username = dbUri.getUserInfo().split(":")[0];
        String password = dbUri.getUserInfo().split(":")[1];
        String ConnectionString = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath();



        return DriverManager.getConnection(ConnectionString, username, password);
    }

}

错误

> java.lang.NullPointerException
    at java.net.URI$Parser.parse(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    at MainConfig.dataSource(MainConfig.java:23)
    at MainConfig.main(MainConfig.java:14)

我做错了什么?

为了连接到heroku的PostgreSQL(带有必需的ssl),您必须将以下内容附加到url:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

因此,以上答案中提供的正确网址是:

jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

没有这些边界,您将得到描述的错误:

error: no pg_hba.conf entry for host 

格式应为: jdbc:postgresql://host:port/database ,而在您的代码中,请注意几个“:” jdbc:postgresql://l********n:cPd7VRjIhNVWOrZ4uWEeZWKYqV@ec2-184-73-251-115.compute-1.amazonaws.com:5432/dac36a93ohuvsd"

您的网址应类似于-jdbc:postgresql:// hostname:port / dbname?sslmode = require

复制heroku站点中提到的主机名(主机)端口和数据库名(数据库)

不要忘记在URL中附加?sslmode = require,否则您将无法连接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM