Java使用JDBC连接到Postgres-SQLException

时间:2019-01-31 23:41:40

标签: java postgresql jdbc

Iam tryig连接到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:***************

2 个答案:

答案 0 :(得分:0)

我相信您的问题是您的连接网址格式错误。

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,URL的格式为:

jdbc:postgres://host:port/database

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

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

答案 1 :(得分:0)

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

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

否则,我有一个适合我的网址示例,除了我不完全使用jdbc之外,它是一个spring-boot项目:

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

注释的URL中没有端口号,并且像Willis指出的那样,可能不支持所有参数。