联机部署后Java JDBC通信链路故障
我在netbeans上使用JavaHttpServlet创建了我的第一个API。经过几天的工作,我终于可以将它连接到这个mySQL googleCloud数据库,并在本地获得结果。但一旦使用appengine在google云上发布此API,就会抛出以下错误:联机部署后Java JDBC通信链路故障,java,mysql,google-app-engine,jdbc,sqlexception,Java,Mysql,Google App Engine,Jdbc,Sqlexception,我在netbeans上使用JavaHttpServlet创建了我的第一个API。经过几天的工作,我终于可以将它连接到这个mySQL googleCloud数据库,并在本地获得结果。但一旦使用appengine在google云上发布此API,就会抛出以下错误: Error sqlException:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last pa
Error sqlException: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.
但是mySQL数据库允许访问所有IP,那么会有什么问题呢?下面是我的代码:
public class HelloServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PrintWriter out = resp.getWriter();
//out.println("Dear vistor, you are accessing my first project deployed on cloud. Thank you");
try {
Class.forName("com.mysql.jdbc.Driver");
String url = String.format("jdbc:mysql://IP:3306/DatabaseName?useSSL=false&useUnicode=true&characterEncoding=UTF-8");
Connection connection = DriverManager.getConnection(url, "userName", "Password");
try (Statement statement = connection.createStatement()) {
ResultSet resultSet = statement.executeQuery("select test from tableTest;");
while (resultSet.next()) {
out.println(resultSet.getString(1));
}
}
} catch (ClassNotFoundException ex) {
out.println("Error ClassNotFoundException:" + ex.toString());
} catch (SQLException ex) {
out.println("Error sqlException:" + ex.toString());
}
catch(Exception ex){
out.println("Exception:" + ex.toString());
}
}
}
更新:
基于,我发现在网上发布时不应该使用密码。因此,我已通过以下方式更新代码以使用jdbc google drive:
Class.forName("com.mysql.jdbc.GoogleDriver");
String url = String.format("jdbc:google:mysql://appId:instanceId/dbName?user=root");
Connection connection = DriverManager.getConnection(url);
但当我在网上发布时,同样的错误被抛出
更新2:
可能是因为我的appId包含“-”之类的“test-123”吗?但实际上,我正在以以下形式发送我的url:
url=“jdbc:google:mysql://test-123:myInstance/myDatabase?user=root&useUnicode=true&characterEncoding=UTF-8";