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

标签 java jdbc google-cloud-sql

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

现在我有

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

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

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

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

谢谢。

编辑

按照mohanrathour的链接,我获得了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 的教程)。

最佳答案

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

不需要将 IP 地址列入白名单的替代方案是使用 Cloud SQL 套接字库,该库使用具有短期证书的 SSL session : https://cloud.google.com/sql/docs/external#java

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

关于java - 使用简单的 Java 程序 (JDBC) 连接到 Google SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40861457/

相关文章:

java - 如何在 GridLayoutManager 中改变每条偶数行的方向?

java - 将两个对象合并为一个对象

java - Java包名长度有限制吗?

java - 关闭各种 JDBC 对象的正确顺序

java - 如何在DBCP中设置查询执行超时?

postgresql - 谷歌云 SQL for PostgreSQL `work_mem`

java - 将字符串硬编码为 DateTimeFormatter 格式

java - 两个类以不同的方式看待 JDBC 驱动程序

google-cloud-sql - Google Cloud SQL 的典型 ormconfig.json 文件?

mysql - SQLAlchemy AppEngine 标准 - 与 MySQL 服务器的连接丢失