2016-07-06 39 views
0

私はちょっと新しいですが、ec2インスタンスを起動してRDSでMySQLインスタンスをインストールした後、ssh(.pemファイル)を使用してMySQL Workbench経由で接続します。Amazon EC2でMySQLに接続するJDBC

私の問題は、jdbcと接続しようとしているときに、認証がどのように正確に行われると思われているのですか?

ここで誰かが私に進める方法についてのヒントを与えることを願って、私のコードです:私は

  1. ...私はいくつかの重要な詳細を忘れてしまった

    public void create_table(){ 
        Connection c = null; 
        Statement stmt = null; 
    
        try { 
         Class.forName("com.mysql.jdbc.Driver"); 
         c = DriverManager.getConnection ("jdbc:mysql://127.0.0.1:3306/test","root", "password"); 
    
    //   c = DriverManager.getConnection ("jdbc:mysql://mydatabase.us-east-1.rds.amazonaws.com:3306/test","user="+"root"+"password=root", ""); 
    
    
    
    
    
         System.out.println("Opened database successfully"); 
    
         stmt = c.createStatement(); 
         String sql = "CREATE TABLE USERS " + 
            "(ID INT PRIMARY KEY ," + 
            " DEVICE   TEXT NOT NULL, " + 
            " NAME   TEXT  NOT NULL)"; 
         stmt.executeUpdate(sql); 
         stmt.close(); 
         c.close(); 
        } catch (Exception e) { 
          System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
          System.exit(0); 
        } 
    

    EDIT

    Jerseyとserveltを使ってJavaで自分のコードを書きました。

  2. 私は自分のWARファイルをec2インスタンスにアップロードしました。
  3. ウェブアプリとMySQLサーバの両方が同じインスタンス上で実行されている今後

私はコミュニケーションを構築したい。..

ありがとうございました!

+2

へのアクセス権を持っていることを接続できることを確認し、エラーのスタックトレースを追加して、あなたの質問を更新してください。 @Dgot –

+0

こんにちは、何らかの理由で** RDS **のログが空です。何も起こらず、動作しません。 – Dgot

答えて

0

SQL Syntaxが間違っています。 Textの値はVARCHARタイプとしてSQLに挿入されます。角の中の値をVARCHAR(HERE)に変更して、必要に応じてテキスト値の長さを変更することができます。このコードを試してください。仮定認証が行われるための方法を正確に

//STEP 1. Import required packages 
import java.sql.*; 

public class JDBCExample { 
    // JDBC driver name and database URL 
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost:3306/STUDENTS"; 

    // Database credentials 
    static final String USER = "username"; 
    static final String PASS = "password"; 

    public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    try{ 
     //STEP 2: Register JDBC driver 
     Class.forName("com.mysql.jdbc.Driver"); 

     //STEP 3: Open a connection 
     System.out.println("Connecting to a selected database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 
     System.out.println("Connected database successfully..."); 

     //STEP 4: Execute a query 
     System.out.println("Creating table in given database..."); 
     stmt = conn.createStatement(); 

     String sql = "CREATE TABLE USERS " + 
       "(ID INTEGER not NULL," + 
       " DEVICE VARCHAR(255) not NULL," + 
       " NAME VARCHAR(255) not NULL,"+ 
       "PRIMARY KEY (ID))"; 

     stmt.executeUpdate(sql); 
     System.out.println("Created table in given database..."); 
    }catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
     if(stmt!=null) 
      conn.close(); 
     }catch(SQLException se){ 
     }// do nothing 
     try{ 
     if(conn!=null) 
      conn.close(); 
     }catch(SQLException se){ 
     se.printStackTrace(); 
     }//end finally try 
    }//end try 
    System.out.println("Goodbye!"); 
}//end main 
}//end JDBCExample 
0

?あなたはあなたの例で使用フォームのいずれかを使用することができますが、間違ったことはあなたがRDS上でテ​​ストデシベルを持っている場合は、参照する必要があり、localhostに接続し、両方の

c = DriverManager.getConnection ("jdbc:mysql://127.0.0.1:3306/test","root", "password"); 

である

あなたの2番目の例のようなRDSの終点

c = DriverManager.getConnection ("jdbc:mysql://mydatabase.us-east-1.rds.amazonaws.com:3306/test","user="+"root"+"password=root", ""); 

ここで、終点は正しくなりますが、接続する文字列が間違っています。あなたはRDS consoleへのログイン、正確にデータベースのエンドポイントを見つけるには

String jdbcUrl = "jdbc:mysql://mydatabase.us-east-1.rds.amazonaws.com:3306/test?user=root&passwor‌​d=password"; 
Connection con = DriverManager.getConnection(jdbcUrl); 

または

String url = "jdbc:mysql://mydatabase.test.us-east-1.rds.amazonaws.com:3306/"; 
String userName = "root"; 
String password = "password"; 
String dbName = "test"; 
Connection connection = DriverManager.getConnection(url + dbName, userName, password); 

次の形式を使用することができます(右の地域を選択しない場合は、私たち-東-1することを確認してください) 、あなたのデータベースを選択し、エンドポイントはありますが、実行可能性のある他の潜在的な問題がの上にある

enter image description here

になります

DBインスタンスは、MySQLアプリケーションまたはユーティリティが実行されているデバイスまたはAmazon EC2インスタンスからの接続を許可しないセキュリティグループを使用して作成されました。 DBインスタンスがVPCで作成された場合は、接続を許可するVPCセキュリティグループが必要です。 DBインスタンスがVPCの外部で作成された場合は、接続を認可するDBセキュリティグループが必要です。

RDS DBとEC2インスタンスの両方のセキュリティグループのルールをチェックして、EC2インスタンスは、RDSサーバー

+0

こんにちは、何かの理由で、まだ動作していません。セキュリティグループを追加しようとすると、次のメッセージが表示されます。_このアカウントでは、この地域のEC2-Classicプラットフォームはサポートされていません。 DBセキュリティグループは、EC2-Classicプラットフォームがサポートされている場合にのみ必要です。代わりに、VPCセキュリティグループを使用してDBインスタンスへのアクセスを制御してください。問題点を知っていますか? VPCの設定方法について説明します。ありがとう。 – Dgot

+0

checkこのエラーメッセージについては、http://stackoverflow.com/questions/28483111/why-do-i-get-your-account-does-not-support-the-ec2-classic-platform-in-this-regを参照してください。 –

+0

こんにちは、あなたの方法をいくつか試した後、今私は接続を拒否する..任意の手がかり? – Dgot

関連する問題