Mysql Google端点有什么问题?云SQL连接?

Mysql Google端点有什么问题?云SQL连接?,mysql,sql-server,maven,jdbc,google-cloud-endpoints,Mysql,Sql Server,Maven,Jdbc,Google Cloud Endpoints,我正在尝试从谷歌端点服务器连接到谷歌云SQL服务器。我正在修改本教程中的Greetings.getGreeting方法: 要调用本教程中演示的云mysql数据库,请参见doGet方法: 我已经确保可以从我的机器mysql客户端连接到数据库。数据库实例simple有一个单表simpletable,其行包含entityID和字符串。但我无法连接,所以这还不太重要 这是我的端点代码: package com.example.helloendpoints; import com.google.api

我正在尝试从谷歌端点服务器连接到谷歌云SQL服务器。我正在修改本教程中的Greetings.getGreeting方法: 要调用本教程中演示的云mysql数据库,请参见doGet方法:

我已经确保可以从我的机器mysql客户端连接到数据库。数据库实例simple有一个单表simpletable,其行包含entityID和字符串。但我无法连接,所以这还不太重要

这是我的端点代码:

package com.example.helloendpoints;

import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.response.NotFoundException;
import com.google.appengine.api.users.User;

import java.sql.*;
import java.util.ArrayList;

import javax.inject.Named;

/**
 * Defines v1 of a helloworld API, which provides simple "greeting" methods.
 */
@Api(
    name = "helloworld",
    version = "v1",
    scopes = {Constants.EMAIL_SCOPE},
    clientIds = {Constants.WEB_CLIENT_ID,
            Constants.ANDROID_CLIENT_ID,
            Constants.IOS_CLIENT_ID,
            Constants.API_EXPLORER_CLIENT_ID},
    audiences = {Constants.ANDROID_AUDIENCE}
)
public class Greetings {

  public static ArrayList<HelloGreeting> greetings = new ArrayList<HelloGreeting>();

  static {
    greetings.add(new HelloGreeting("hello world!"));
    greetings.add(new HelloGreeting("goodbye world!"));
  }

  public HelloGreeting getGreeting(@Named("id") Integer id) throws NotFoundException {

      // pair to use when running local endpoint server
      String urlFromDev = "jdbc:mysql://173.194.XXX.90:3306/simple?user=root";
      String classForNameFromDev = "com.mysql.jdbc.Driver";

      // pair to use when running cloud endpoint server
      String classForNameFromCloud = "com.mysql.jdbc.GoogleDriver";
      String urlFromCloud = "jdbc:google:mysql://"
              + Constants.PROJECT_ID + ":"
              + Constants.CLOUD_SQL_INSTANCE_NAME +"/"
              + Constants.DATABASE_NAME + "?user=root";

      HelloGreeting helloGreeting = new HelloGreeting();
      try {
              Class.forName(classForNameFromDev);
//              Class.forName(classForNameFromCloud);
      } catch (ClassNotFoundException e) {
          e.printStackTrace();
      }
      try {
          Connection connection = DriverManager.getConnection(urlFromDev);
//          Connection connection = DriverManager.getConnection(urlFromCloud);
          try {
              String statement = "Select simplestring from simpletable where entryID = ?";
              PreparedStatement preparedStatement = connection.prepareStatement(statement);
              preparedStatement.setInt(1, id);
              ResultSet resultSet = preparedStatement.executeQuery();
              if (!resultSet.wasNull()) {
                  helloGreeting.setMessage(resultSet.getString("simplestring"));
              } else {
                  throw new NotFoundException("Greeting not found with an index: " + id);
              }
          } finally {
              connection.close();
          }
      } catch (SQLException e) {
          e.printStackTrace();
      }
      return  helloGreeting;
  }


  @ApiMethod(name = "greetings.multiply", httpMethod = "post")
  public HelloGreeting insertGreeting(@Named("times") Integer times, HelloGreeting greeting) {
    HelloGreeting response = new HelloGreeting();
    StringBuilder responseBuilder = new StringBuilder();
    for (int i = 0; i < times; i++) {
      responseBuilder.append(greeting.getMessage());
    }
    response.setMessage(responseBuilder.toString());
    return response;
  }

  @ApiMethod(name = "greetings.authed", path = "hellogreeting/authed")
  public HelloGreeting authedGreeting(User user) {
    HelloGreeting response = new HelloGreeting("hello " + user.getEmail());
    return response;
  }
}
我已经尝试在appengine-web.xml中启用mysql连接器/j

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <use-google-connector-j>true</use-google-connector-j>

    <application>backendapitutorial-1XXX</application>
    <version>${app.version}</version>
    <threadsafe>true</threadsafe>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-  INF/logging.properties"/>
    </system-properties>
</appengine-web-app>
无论我以何种方式通过it开发人员或云构建+部署,我都会得到 java.sql.SQLException:未找到适合jdbc的驱动程序:mysql://173.194.XXX.90:3306/simple?user=root 或 java.sql.SQLException:未找到适合jdbc的驱动程序:google:mysql://backendapitutorial-XXXX:simple/simple?user=root

在这篇文章中,我用Xs替换了真实的IP和项目名称

我已经看过这些:

我正在和Maven一起构建IntellijIDE


非常感谢您的帮助。谢谢。

问题部分解决了:我使用maven进行构建,但我没有在pom中添加mysql连接器java作为依赖项。这至少允许我的应用程序在本地devserver上运行时进行连接。我还意识到urlFromCloud,jdbc:google:mysql://backendapitutorial-XXXX:simple/simple?user=root,应该是jdbc:google:mysql://backendapitutorial-XXXX:simple?user=root. 当我看到Google Appengine控制台在数据库屏幕上单击How do I connect链接时会生成示例代码时,我意识到了这一点。问题部分解决了:我使用maven构建,但我没有在pom中添加mysql connector java作为依赖项。这至少允许我的应用程序在本地devserver上运行时进行连接。我还意识到urlFromCloud,jdbc:google:mysql://backendapitutorial-XXXX:simple/simple?user=root,应该是jdbc:google:mysql://backendapitutorial-XXXX:simple?user=root. 当我看到Google Appengine控制台在数据库屏幕上单击“如何连接”链接时会生成示例代码时,我意识到了这一点。