[英]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);
}
编辑
我忘记了一些重要的细节...
现在,在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&password=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.