java - 无法通过 Android Studio 使用 JDBC 连接到 Cloud SQL 数据库

标签 java android android-studio google-cloud-sql

我创建了一个正在运行的 Cloud Sql 实例。我现在已经尝试通过 Android Studio 和 Eclipse 连接到它,但在两个地方都失败了。

package com.example.testapplication3;

import java.sql.*;

public class ConnectToSql {

    public String run()
    {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            String instanceConnectionName = "TheActualInstanceName"; 
            String databaseName = "BudgetApp";

            String IP_of_instance = "35.******";
            String username = "root";
            String password = "********";
            String jdbcUrl = String.format("jdbc:mysql://%s/%s?cloudSqlInstance=%s" + 
                    "&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false",
                    IP_of_instance, databaseName, instanceConnectionName);

            Connection connection = DriverManager.getConnection(jdbcUrl, username, password);

            Statement stat = connection.createStatement();
            ResultSet res = stat.executeQuery("Select * from users;");
            String result = "";
            while (res.next()) 
            {
                result += (res.getString(1) + " " + res.getString(2) + " " + res.getString(3));
            }

            connection.close();

            return result;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }

    }
}

我不断地收到此错误:

java.sql.SQLNonTransientConnectionException: Cannot connect to MySQL server on 35.*******:3,306.
    Make sure that there is a MySQL server running on the machine/port you are trying to connect to and that the machine this software is running on is able to connect to this host/port (i.e. not firewalled). Also make sure that the server has not been started with the --skip-networking flag.

我做了什么:

  • 确保我的 IP 已列入“实例连接”选项卡下的白名单
  • 网址连接的不同格式
  • 通过 ping 确保服务器已启动
  • 仅通过 Cloud Shell 连接
  • 确认云端端口已开放

最佳答案

您应该遵循 connecting to Cloud SQL from external applications 的指导。您应该使用 Cloud SQL jdbc socket factory ,我猜您已经在使用了。

从你的代码中我可以看到 jdbc url 看起来有点奇怪。请尝试将其更改为确切的格式:

jdbc:mysql://google/<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>

您缺少“google”部分。希望这会有所帮助!如果这不起作用,可能值得尝试通过 Cloud SQL 代理进行连接,正如您在我在此处附加的第一个链接中看到的那样。

关于java - 无法通过 Android Studio 使用 JDBC 连接到 Cloud SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58495312/

相关文章:

java - 即使没有单元测试,构建自动化真的有助于提高生产力吗?

java - splashscreen 无法在 java 的 netbeans IDE 中工作?

Java并发访问ArrayList

android - Word Detection 并将其更改为 Voice ..Like R ..Then Speak R

android - 在 Android Studio 中更改布局后需要清理项目

java - 如何在Mpandroid饼图中动态添加文本?

java - 使用 AES-128-CBC 编码/解码时出现问题

android - 在 intellij (/android studio) 中从 xml 生成样式

Android 模拟器(来自 Android Studio)滞后

android-studio - 命令行Gradle的UseSplitVerifier参数