2014-02-27 11 views
14

Ich werde mit einem einfachen Java-Programm zu meiner Postgre-Datenbank Heroku verbinden. Aber wenn ich versuche mich zu verbinden bekomme ich einen Fehler. Kann mir jemand das Problem erklären oder dieses Problem lösen?Kann nicht mit Heroku verbinden PostgreSQL db

Thx: D

Code:

public static void main(String[] args) throws InstantiationException, 
     IllegalAccessException, ClassNotFoundException { 
    System.out.println("-------- PostgreSQL " 
      + "JDBC Connection Testing ------------"); 
    try { 
     Class.forName("org.postgresql.Driver"); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Where is your PostgreSQL JDBC Driver? " 
       + "Include in your library path!"); 
     e.printStackTrace(); 
     return; 
    } 
    System.out.println("PostgreSQL JDBC Driver Registered!"); 
    Connection connection = null; 
    try { 
     // ========>  from heroku website 
     String url = "jdbc:postgresql://ec2-107-20-214-225.compute-1.amazonaws.com:5432/databasename"; 
     Properties props = new Properties(); 
     props.setProperty("user", "someusername"); 
     props.setProperty("password", "somepassword"); 
     props.setProperty("ssl", "true"); 
     connection = DriverManager.getConnection(url, props); 
    } catch (SQLException e) { 

     System.out.println("Connection Failed! Check output console"); 
     e.printStackTrace(); 
     return; 
    }... 

Ausgang:

-------- PostgreSQL JDBC Connection Testing ------------ 
PostgreSQL JDBC Driver Registered! 
Connection Failed! Check output console 
org.postgresql.util.PSQLException: The connection attempt failed. 
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:225) 
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64) 
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:138) 
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29) 
... 
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    ... 
+4

Siehe hier: http://stackoverflow.com/questions/9386803/problems-conne Cting-Pentaho-Kessel-Löffel-zu-Heroku-Postgresql-Using-ssl und hier: http://StackOverflow.com/Questions/11832361/How-to-setup-Spring-Heroku-Postgres-ssl-Datasource –

Antwort

21

Dank Lukas Eklund!

Meine URL sollte wie folgt aussehen:

String url = "jdbc:postgresql://ec2-107-20-214-225.compute-1.amazonaws.com:5432/databasename 
?user=someusername&password=somepassword 
&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"; 
+2

Um arbeiten durch nicht die Validierung des Cert ist nicht großartig aus Sicherheitsgründen ... –

+0

siehe https://jdbc.postgresql.org/documentation/head/ssl-client.html Dokumentation, wie es richtig eingerichtet einschließlich Zertifikate zu validieren – Markus

6

hinzufügen sslmode zur Datenbank url:

String url = „jdbc: postgresql: // ec2-107-20- 214-225.compute-.amazonaws.com:5432/databasename?sslmode=require

Verwandte Themen