簡體   English   中英

通過Java連接到Amazon EC2上的PostgreSQL

[英]Connecting to PostgreSQL on Amazon EC2 through Java

我想連接到Amazon EC2上的Java中的PostgreSQL數據庫。 我可以使用Mac上稱為Postico的postgres客戶端連接到它。 我指定下一個信息:

  1. 昵稱

  2. 主機(ec2-xx-xx-xx-xx.xx-xx-x.compute.amazonaws.com)

  3. 用戶

  4. 密碼

  5. 數據庫名稱

  6. SSH主機

  7. 用戶

  8. 密碼-空白

  9. 私鑰-.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!");
        }

我知道它不起作用,但至少我嘗試過))我不知道如何在請求中指定私鑰(如何發送),或其他任何方法。 有人可以幫我嗎? 謝謝。

使用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。

我還建議您查看Amazon RDS。 您可以使用上面的代碼連接到它,就像在EC2上運行的Postgres實例一樣。

我希望這有幫助!

從Java連接時,您無需指定SSH信息(SSH主機,私鑰等)。 JDBC驅動程序期望能夠直接連接到數據庫服務器,並且不支持SSH隧道。 如果需要使用SSH隧道,則在啟動Java應用程序之前,您將單獨創建該連接。

如果Java應用程序在AWS上運行,那么您應該能夠配置網絡以允許直接連接。 如果要在本地測試Java應用程序並且需要連接到遠程數據庫,則可以在本地運行ssh命令以首先打開隧道。 請參閱此文檔: http : //www.postgresql.org/docs/8.2/static/ssh-tunnels.html或此答案: 通過SSH隧道的PostgreSQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM