我知道App Engine有自己的数据存储区。这对大多数情况来说都很好,并且相当容易使用。但是,我们有一个MySQL数据库,我们用于几个应用程序,而不是所有这些都是基于Web的。我们想要使用App Engine有很多原因,但是想让App Engine应用程序访问我们的MySQL数据库。我发现的文档并没有明确说明我是否可以这样做。有没有人这样做过,或者指向显示如何操作的文档?
答案 0 :(得分:23)
Google最近宣布支持GAE中的Cloud SQL - http://googleappengine.blogspot.com/2011/10/google-cloud-sql-your-database-in-cloud.html
答案 1 :(得分:19)
您无法创建与数据库的直接网络连接。 overview page概述了阻止您使用Mysql的主要限制 - 在这种情况下,主要的限制是“任意网络连接”。您只能在应用引擎内进行http(s)调用。
JVM在安全的“沙箱”中运行 环境隔离你的 申请服务和安全。 沙箱确保应用程序只能 执行不干涉的操作 具有性能和可扩展性 其他应用程序。例如,一个应用程序 无法生成线程,写入数据 本地文件系统或make 任意网络连接。一个应用程序 也不能使用JNI或其他原生 码。 JVM可以执行任何Java 在...内运行的字节码 沙箱限制。
答案 2 :(得分:9)
简单的答案是:NO。
访问MySQL的方法是向其公开Web服务接口。
答案 3 :(得分:3)
答案 4 :(得分:3)
在开发过程中使用本地MySQL实例:
import com.google.appengine.api.rdbms.AppEngineDriver; public static void makeConnection() { try { if (conn == null || !conn.isValid(0)) { String url = "localhost/databasename"; String username = "root"; String password = "password"; DriverManager.registerDriver(new AppEngineDriver()); String urlForConnection = "jdbc:mysql://" + url; conn = DriverManager.getConnection(urlForConnection, username, password); } } catch (SQLException e) { e.printStackTrace(); } } // in web.xml <filter> <filter-name>_ah_DevSocketFilter</filter-name> <filter-class>com.google.appengine.api.socket.dev.DevSocketFilter</filter-class> <init-param> <param-name>use-native-sockets</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>_ah_DevSocketFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
import com.google.appengine.api.rdbms.AppEngineDriver; public static void makeConnection() { try { if (conn == null || !conn.isValid(0)) { String url = "localhost/databasename"; String username = "root"; String password = "password"; DriverManager.registerDriver(new AppEngineDriver()); String urlForConnection = "jdbc:mysql://" + url; conn = DriverManager.getConnection(urlForConnection, username, password); } } catch (SQLException e) { e.printStackTrace(); } } // in web.xml <filter> <filter-name>_ah_DevSocketFilter</filter-name> <filter-class>com.google.appengine.api.socket.dev.DevSocketFilter</filter-class> <init-param> <param-name>use-native-sockets</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>_ah_DevSocketFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
使用云
答案 5 :(得分:1)
是的,但不是正常的,通过创建一个Web服务或一个简单的php页面作为中间件并在json或xml中传递数据。
答案 6 :(得分:0)
我仍然处于这一切的学习阶段,但我相当肯定你现在可以通过以下几种方式做到这一点:
“Google Apps脚本能够通过JDBC与Jdbc服务建立数据库连接。目前的支持扩展到MySQL,Microsoft SQL Server和Oracle.Apps Script可以轻松连接到Google Cloud SQL托管的数据库,但也适用于其他云托管平台甚至本地数据库。“ https://developers.google.com/apps-script/jdbc
(原文来自App Engine Question)
答案 7 :(得分:0)