部署到云后无法访问 MySQL 数据库 - 通信异常



我通过我的应用引擎Java Rest API项目连接到我的Google Cloud SQL,以在我的云上检索和存储数据。我可以通过Localhost成功地与服务器通信,但在我发布后,我得到了这个错误:

尝试运行查询:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

最后一个成功发送到服务器的数据包是0毫秒以前驱动程序尚未从服务器接收到任何数据包。

虽然有这么多解决方案,但我很遗憾地说,它们都不起作用。

这是我的连接字符串:

String url = null;
try {
    if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
        Class.forName("com.mysql.jdbc.GoogleDriver");
        url = "jdbc:google:mysql://APP_ENGINE_ID:SQL_INSTANCE_NAME/DB_NAME?user=root";
    } else {
        Class.forName("com.mysql.jdbc.Driver");
        url = "jdbc:mysql://MY_IPV4_ADDRESS:3306/DB_NAME?user=root";
    }
} catch (Exception e) {
    e.printStackTrace();
}

我通过我的Rest API得到这个错误后,我只发布它。基本上,通过Localhost工作,但不能在云上远程工作。

我调试并指出了它崩溃的地方。它发生在我尝试与服务器建立连接并执行查询之后:

try {
    //THIS is where it crashes
    conn = DriverManager.getConnection(url);
    try {
        String query = "SELECT * FROM UserTable";
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(query);
        while (rs.next())
        {
            //Code
        }
        st.close();
    } finally {
        conn.close();
    }
} catch (SQLException e) {
    e.printStackTrace();
}

以前有人面对过这个问题吗?

正如Herman、Igor和Vadim所指出的,这只是我的PROJECT_ID:INSTANCE_ID中的一个错误:

错误代码:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
    Class.forName("com.mysql.jdbc.GoogleDriver");
    url = "jdbc:google:mysql://APP_ENGINE_ID:SQL_INSTANCE_NAME/DB_NAME?user=root";
}

我一直在使用应用程序引擎ID,而不是我本应使用的项目ID

更正的代码:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
    Class.forName("com.mysql.jdbc.GoogleDriver");
    url = "jdbc:google:mysql://PROJECT_ID:SQL_INSTANCE_NAME/DB_NAME?user=root";
}

正如你所看到的,我在Android中使用asyncTask(与java中的Thread相同)调用了

public class Connect extends AsyncTask<Context, Integer, Long> 
 {
  protected Long doInBackground(Context... contexts) {
    Connection connection;
    String query = "Some query";
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://<your cloud IP address>/<database schema you want to connect to>", "<user>", "<password>");
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(query);

希望你现在就得到了:)

相关内容

  • 没有找到相关文章

最新更新