小编Gab*_*lev的帖子

App Engine Java Servlet无法连接到Cloud SQL

我使用app引擎创建了一个java web servlet,servlet向数据库发出请求.我已经使用本地数据库在本地测试了servlet并且它工作得很好,然后我继续在本地测试servlet但是仍然访问了Cloud SQL数据库,这也很有效.

在部署servlet之后我的问题出现了.部署完所有数据库请求后返回以下内容:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not 
received any packets from the server.
Run Code Online (Sandbox Code Playgroud)

我在云控制台中查看,我的应用程序已正确添加到访问控制选项卡下的云SQL授权应用程序引擎应用程序中.

是否有人在部署的应用引擎servlet上遇到过类似的问题?那里有任何解决方案或建议吗?我将不胜感激任何帮助!

更新:

使用以下代码生成上述错误以访问db

Class.forName("com.mysql.jdbc.Driver");
Url = "jdbc:mysql://<ip-address-cloudsql>:3306/<dbname>";
Connection con = DriverManager.getConnection (Url,"root",<password>);
Run Code Online (Sandbox Code Playgroud)

使用此代码实现了同样的错误,请注意它与此处示例中显示的代码非常相似https://developers.google.com/appengine/docs/java/cloud-sql/

Class.forName("com.mysql.jdbc.GoogleDriver");
Url = "jdbc:google:mysql://<appID:instanceID>/<dbname>? 
user=root&password=<password>";
Connection con = DriverManager.getConnection (Url);
Run Code Online (Sandbox Code Playgroud)

当我使用appid和实例id来设置url时,我按照此stackoverflow文章中的格式化提示显示: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:

使用此代码导致以下不同的错误:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)

我假设它说localhost因为我的cloudsql数据库设置为遵循app引擎servlet.另外,要知道这两种方法在本地运行servlet和访问cloud sql数据库时都能正常工作.

有什么想法吗?我不知道还有什么可以尝试:[

java sql google-app-engine servlets google-cloud-sql

10
推荐指数
1
解决办法
4325
查看次数