Mysql Google端点有什么问题?云SQL连接?
我正在尝试从谷歌端点服务器连接到谷歌云SQL服务器。我正在修改本教程中的Greetings.getGreeting方法: 要调用本教程中演示的云mysql数据库,请参见doGet方法: 我已经确保可以从我的机器mysql客户端连接到数据库。数据库实例simple有一个单表simpletable,其行包含entityID和字符串。但我无法连接,所以这还不太重要 这是我的端点代码: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
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控制台在数据库屏幕上单击“如何连接”链接时会生成示例代码时,我意识到了这一点。