使用简单的 Java 程序连接到 Google SQL (JDBC)

Connecting to Google SQL with a simple Java program (JDBC)

我有一个简单的 Java 程序(不是网络 application/Google Engine/etc)。 我浏览了 Google Cloud SQL 网站中的所有指南,但我不知道如何连接到服务器。

现在我有

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection("jdbc:mysql://x:3306/y?user=root"); 

其中 x 是实例的 IP 地址(取自实例的属性),y 只是实例 ID。

我是不是做错了什么? 我还按照其中一个教程的建议为 root 设置了密码。我应该在代码中的某处指定它吗?

谢谢。

编辑

跟随 mohan rathour 的 link,我获得了 Cloud SQL MySQL Socket Factory,我的代码现在看起来像:

Class.forName("com.mysql.jdbc.Driver");

String jdbcUrl = String.format("jdbc:mysql://google/%s?cloudSqlInstance=%s&"+"socketFactory=com.google.cloud.sql.mysql.SocketFactory",
                    "dbname",
                    "instanceConnectionName");

connection = DriverManager.getConnection(jdbcUrl, "userName", "password");

我在控制台中得到以下信息:

INFO: Connecting to Cloud SQL instance [instanceName].
com.google.cloud.sql.mysql.SslSocketFactory getInstance
INFO: First Cloud SQL connection, generating RSA key pair.

但后来我得到了这个例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

解决方案

无需使用"Cloud SQL MySQL Socket Factory"。

在 Google SQL 面板中,转到您的实例面板 -> 访问控制 -> 授权,添加以下网络地址并单击保存。

0.0.0.0/0

现在您可以使用此代码连接:

Class.forName("com.mysql.jdbc.Driver");
...
String url= String.format("jdbc:mysql://x:3306/y");
connection = DriverManager.getConnection(url, z, w);

其中x是你的实例IP(从面板获取),y是实例名称,z是数据库(不是账户)用户名(通常是"root"),w是用户密码(你必须设置它。看看 Google 的教程)。

您是否创建了 google mysql 的本地实例,或者您可以直接连接。您可以在下方查看 link Google mysql database cloud connection in java 或使用 google 驱动程序查看 Class.forName("com.mysql.jdbc.GoogleDriver");

默认情况下,云 SQL 实例不允许 public IP 上的连接。您必须添加要连接的各个子网。 您可以在此处查看完整文档:https://cloud.google.com/sql/docs/external#appaccessIP

不需要将 IP 地址列入白名单的替代方法是使用云 SQL 套接字库,它使用带有短期证书的 SSL 会话: https://cloud.google.com/sql/docs/external#java

不建议将 0.0.0.0/0 列入白名单,因为它会向全世界开放数据库。