2016-07-06 2 views
0

Я немного новичок в этом, но после запуска экземпляра ec2 и установки экземпляра MySQL через RDS мне удается подключиться к нему через MySQL Workbench с помощью файла ssh (.pem).JDBC подключение к MySQL на Amazon ec2

Моя проблема заключается в том, что я не могу понять, когда я пытаюсь подключиться к jdbc, как именно должна выполняться аутентификация?

Вот мой код, надеюсь, кто-нибудь может дать мне подсказку о том, как действовать:

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

Я забыл некоторые важные детали ...

  1. I написал мой код на Java, используя Jersey и servelt.
  2. Я загрузил свой файл WAR в свой экземпляр ec2.

Теперь после того, как веб-приложение и сервер MySQL работают на том же экземпляре, я хочу построить связь ..

Спасибо!

+2

пожалуйста, добавьте StackTrace ошибки и обновить свой вопрос. @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

как именно аутентификации предполагают, чтобы быть сделано?

вы можете использовать одну из формы вы используете в вашем примере, но есть неправильные вещи в оба

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

подключение к локальному, если у вас есть тест дб на RDS вы должны ссылаться на конечная точка RDS, как ваш второй пример

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

Здесь конечная точка будет верна, но строка для подключения неверна.Вы можете использовать следующую форму

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); 

Чтобы найти именно вашу базу данных конечной точки, войдите в RDS console (не забудьте выбрать правильный регион, если не мы-восток-1) , выберите базу данных и конечная точка будет там

enter image description here

другой потенциальной проблемой вы можете столкнуться на Security Groups

Экземпляр DB был создан с использованием группы безопасности, которая не разрешает подключения с устройства или экземпляра Amazon EC2, где работает приложение или утилита MySQL. Если экземпляр DB был создан в VPC, он должен иметь группу безопасности VPC, которая разрешает соединения. Если экземпляр DB был создан вне VPC, он должен иметь группу безопасности БД, которая разрешает соединения.

Проверьте свои групповые правила безопасности и для RDS DB и экземпляр ec2 и убедитесь, что вы можете подключить, что экземпляр EC2 имеет доступ к серверу RDS

+0

Привет, я пытался делать то, что вы написали, по какой-то причине он все еще не работает. при попытке добавить группу безопасности, я получаю следующее сообщение: _ Ваша учетная запись не поддерживает платформу EC2-Classic в этом регионе. Группы безопасности БД необходимы только тогда, когда поддерживается платформа EC2-Classic. Вместо этого используйте группы безопасности VPC для управления доступом к вашим экземплярам БД. Знаете ли вы, в чем проблема? и как настроить VPC. Благодарю. – Dgot

+0

проверить http://stackoverflow.com/questions/28483111/why-do-i-get-your-account-does-not-support-the-ec2-classic-platform-in-this-reg для этого сообщения об ошибке –

+0

Привет, пробовав свой путь несколько раз, теперь я получаю отказ от связи .. какая-нибудь подсказка? – Dgot

Смежные вопросы