【问题标题】:No suitable driver found on attempt to connect Heroku Database using JDBC尝试使用 JDBC 连接 Heroku 数据库时找不到合适的驱动程序
【发布时间】:2017-02-28 13:37:15
【问题描述】:

我正在尝试将部署在 Heroku 中的 Web 应用与其提供的 postgre 数据库连接起来。

我按照this site 给出的说明部署了我的应用程序,但它抛出了以下错误消息

No suitable driver found for jdbc:postgresql://ec2-184-73-222-90.compute-1.amazonaws.com:5432/d9l4hq0c2h46o6?user=wyhgmwybghpndl&password=kWxLQ_y2risoVSFbzTKR_YsUFF&sslmode=require

我尝试了herehere 给出的建议,但没有奏效。 我还在构建路径中添加了 postgresql-9.4.1211.jre6.jar 作为外部 JARS。

以下是我的 Test.java,它接收到 GET 请求并尝试连接到 Heroku 数据库

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

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("wallpost")
public class wallpost {

    private static String connectionMsg = null;
    private static final String DATABASE_URL = "DATABASE_URL";
    private static final String JDBC_POSTGRE = "jdbc:postgresql://" ;
    private static final String JDBC_DATABASE_URL = "JDBC_DATABASE_URL"; 

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public  String getPosts() {

        Connection conn = null;
        try {
            conn = tryAndConnectToDB();
        } catch (SQLException e) {
            connectionMsg = e.getMessage();
        } catch (URISyntaxException e) {
            connectionMsg = e.getMessage();
            e.printStackTrace();
        }

        if  (conn != null)
            try {
                return "Oops!! No posts made yet!!" + conn.getSchema();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connectionMsg;
    }

    private static Connection tryAndConnectToDB() throws URISyntaxException, SQLException {

        try {
            Class.forName("org.postgresql.Driver");
        } 
        catch (ClassNotFoundException e) {

            connectionMsg = e.getMessage();         
        }

        final String dbUrl = System.getenv(JDBC_DATABASE_URL);

            //URI dbURI = new URI(System.getenv(DATABASE_URL));

//          final String userName = dbURI.getUserInfo().split(":")[0];
//          final String userPassword = dbURI.getUserInfo().split(":")[1];
//          
//          final String dbURL = JDBC_POSTGRE + dbURI.getHost() + ":" + dbURI.getPort() + dbURI.getPath();

        //  return DriverManager.getConnection(dbURL,userName,userPassword);

        return DriverManager.getConnection(dbUrl);


        }

    }

感谢您的宝贵时间!

【问题讨论】:

  • Class.forName是否成功加载驱动类?

标签: java postgresql heroku jdbc


【解决方案1】:

首先,您需要重置您的数据库凭据,因为您已经公开发布了它们。运行这个命令:

heroku pg:credentials DATABASE --reset

该错误消息表明您的类路径中没有 Postgres JDBC 驱动程序。

postgresql-9.4.1211.jre6.jar 几乎肯定不是您想要的 JAR。它适用于 Java 6。而且您不想让它成为外部依赖项。

在你的pom.xml,你应该有这个:

<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>9.4-1211</version>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多