当前位置: 首页 > 知识库问答 >
问题:

通过Java连接到Amazon EC2上的PostgreSQL

凤经武
2023-03-14

我想在java中连接到Amazon EC2上的PostgreSQL数据库。我可以使用Mac上名为Postico的postgres客户端连接到它。我指定下一个信息:

>

主机(ec2 xx xx xx xx.xx-xx-x.compute.amazonaws.com)

用户

密码

数据库名称

SSH主机

用户

密码-空白

私钥-. pem文件

我找不到任何关于如何在Java中连接它的例子。我找到了一些RedshiftJDBC驱动程序,并将其添加到项目中。然后我尝试了这个:

try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Where is your MySQL JDBC Driver?");
            e.printStackTrace();
            return;
        }
        System.out.println("MySQL JDBC Driver Registered!");
        try {
            this.connection = DriverManager.getConnection("jdbc:postgresql://" +DNS+"/"+myDBname, MYSQLUSER, MYSQLPW);
        } catch (SQLException e) {
            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
        }

        if (connection != null) {
            System.out.println("You made it, take control your database now!");
        } else {
            System.out.println("Failed to make connection!");
        }

我知道这行不通,但至少我试过了。)我不知道如何在请求中指定私钥(如何发送它),或者其他什么。有人能帮我吗?非常感谢。

共有2个答案

冯文彬
2023-03-14

从Java连接时,您没有指定SSH信息(SSH主机、私钥等)。JDBC驱动程序希望能够直接连接到数据库服务器,并且不支持SSH隧道。如果需要使用SSH隧道,则必须在启动Java应用程序之前单独创建该连接。

如果Java应用程序在AWS上运行,那么您应该能够配置网络以允许直接连接。如果您在本地测试Java应用程序,并且需要连接到远程数据库,那么您可以在本地运行ssh命令以首先打开隧道。请参阅本文档:http://www.postgresql.org/docs/8.2/static/ssh-tunnels.html或者这个答案:PostgreSQL通过SSH隧道

秦俊友
2023-03-14

使用PostgreSQL JDBC驱动程序尝试以下代码。您希望使代码更具弹性(例如,在连接和发送查询之间检查db是否为null,等等),但这应该可以让您继续。

private final String DB_HOST = "YOUR_EC2_HOSTNAME";
private final String DB_PORT = "5432";
private final String DB_USER = "YOUR_POSTGRES_USERNAME";
private final String DB_PASSWD = "YOUR_POSTGRES_PASSWORD";
private final String DB_NAME = "YOUR_POSTGRES_DBNAME";
private final String DB_URL = "jdbc:postgresql://" + DB_HOST + ":" + DB_PORT + "/" + DB_NAME;

private final String INSERT = "INSERT INTO articles (date, name, uuid) VALUES (?, ?, ?)";
private Connection db = null;

public PostgreSQLService() {
    try {
        Class.forName("org.postgresql.Driver");
        db = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
    } catch (ClassNotFoundException | SQLException ex) {
        log.error(ex);
    }

    try (PreparedStatement st = db.prepareStatement(INSERT)) {
        st.setEscapeProcessing(false);

        st.setDate(1, new java.sql.Date(DateUtil.getToday().getTime()));
        st.setString(2, "YOUR_NAME");
        st.setObject(3, UUID.randomUUID());

        if (st.executeUpdate() <= 0) {
            throw new PostgreSQLServiceException("0 rows inserted while trying to insert a new row ::: " + st.toString());
        }

    } catch (SQLException sqle) {
        throw new PostgreSQLServiceException("Received an SQLException trying to insert a row", sqle);
    }
}

Maven依赖关系是:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4.1208</version>
</dependency>

请注意,如果您从AWS外部执行此代码,则需要在该EC2实例的安全组中打开端口5432。

我还建议看看亚马逊RDS。您可以使用上面的代码连接到它,就像运行在EC2上的Postgres实例一样。

我希望这有帮助!

 类似资料:
  • 我需要通过ssh连接连接到Mysql RDS DB,我尝试过的是打开一个ssh隧道,然后连接到那个DB,但是没有工作。 下面是我的代码: 上述代码崩溃,但有以下例外情况,并在“con=drivermanager.getconnection(dburl,dbuserName,dbpassword);”行中崩溃: 请注意,ssh主机ip与db主机ip不同 多谢了。

  • 问题内容: 我已经尝试过将多种XMPP库用于Node.js,但是在连接到Google Talk的XMPP服务器时遇到了麻烦。我想联系并阅读朋友的状态,但我什至无法走出去! 我有一个通过Google Apps for Domains托管的个人域,例如。 我编写了以下代码-它使用了node-xmpp库(https://github.com/astro/node-xmpp): 建立了连接,但是身份验证失

  • 要从Java连接到MongoDB,我使用: 它运行良好。现在我想连接到机器上的MongoDB,我必须通过SSH登录。我尝试使用JSch,这是我的代码: 一切看起来都很好,我可以连接,但有一个问题: 错误是: 我应该设置更多的东西来连接吗?当我检查输出是时,我如何从程序连接的Java检查。当我使用PuTTY时,一切正常。

  • 我想通过IntelliJ IDEA把MySQL和Java连接起来。 我用的是MySQL。设置为:< br >主机:127.0.01 端口:3306 用户:root 我要使用的数据库的名称是School。 在IntelliJ中,我添加了DB Navigator,设置为: 名称学校 描述:... 主机:localhost 端口:3306 用户:root 密码:在MySQL中工作的密码 毕竟我得到了一个

  • 问题内容: 我有以下代码: 并且在编译时给出错误: 我如何使用它来执行查询并检索其值。 谢谢 PS:与数据库的连接正在工作..(如果我取消注释该行,它将打印“ connected”)。 问题答案: 这是非常糟糕的代码-书面上没有用。您有很多工作要做。 我建议您研究一下并丢弃代码:

  • 问题内容: 我将Redis To Go与https://github.com/mranney/node_redis库结合使用。Redis给了我一个看起来像的URL,但是我不知道如何使用它,因为它只占用了主机和端口。 问题答案: 我相信您拥有的网址的方案是: 。 我不相信被使用。提供了两种登录方法:和。自述文件中有详细信息,但以下是相关部分供参考: redis.createClient(端口,主机,