繁体   English   中英

JDBC在Amazon EC2上连接到MySQL

[英]JDBC connecting to MySQL on Amazon ec2

我当时还比较陌生,但是在启动ec2实例并通过RDS安装MySQL实例之后,我设法使用ssh(.pem文件)通过MySQL Workbench连接到它。

我的问题是,当我尝试与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);
    }

编辑

我忘记了一些重要的细节...

  1. 我使用Jersey和servelt用Java编写了代码。
  2. 我将WAR文件上传到了ec2实例。

现在,在Web应用程序和MySQL服务器都在同一实例上运行之后, 我想建立通信。

谢谢!

您的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

身份验证应该如何完成?

您可以使用示例中使用的一种形式,但是两者都存在错误

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控制台 (如果不是us-east-1,请确保选择正确的区域),选择数据库,端点就在那里

在此处输入图片说明

您可能运行的另一个潜在问题是在安全组上

数据库实例是使用安全组创建的,该安全组未授权来自运行MySQL应用程序或实用程序的设备或Amazon EC2实例的连接。 如果数据库实例是在VPC中创建的,则它必须具有一个授权连接的VPC安全组。 如果数据库实例是在VPC外部创建的,则它必须具有授权连接的数据库安全组。

检查RDS数据库和ec2实例的安全组规则,并确保可以连接ec2实例有权访问RDS服务器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM