使用简单的 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 列入白名单,因为它会向全世界开放数据库。
我有一个简单的 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 列入白名单,因为它会向全世界开放数据库。