我可以将MySQL数据库与App Engine应用程序一起使用

时间:2009-10-30 18:46:52

标签: sql mysql google-app-engine

我知道App Engine有自己的数据存储区。这对大多数情况来说都很好,并且相当容易使用。但是,我们有一个MySQL数据库,我们用于几个应用程序,而不是所有这些都是基于Web的。我们想要使用App Engine有很多原因,但是想让App Engine应用程序访问我们的MySQL数据库。我发现的文档并没有明确说明我是否可以这样做。有没有人这样做过,或者指向显示如何操作的文档?

8 个答案:

答案 0 :(得分:23)

答案 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)

我仍然处于这一切的学习阶段,但我相当肯定你现在可以通过以下几种方式做到这一点:

  • 将应用脚本链接到App Engine并使用JDBC并将其粘贴到Google
  • 将您的SQL数据库存储在Google云端存储上
  • 通过电子表格脚本连接应用脚本
  • 使用他们的Cloud SQL

“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)

是的,你可以。

了解int https://cloud.google.com/sql/docs

您可以将它与GAE支持的任何语言一起使用,也可以从GAE外部连接它。