2009-10-30 80 views
26

我知道App Engine有自己的數據存儲區。這對大多數情況非常有用,而且使用相當簡單。但是,我們有一個MySQL數據庫,我們用於多個應用程序,而不是所有的都是基於Web的。我們想要使用App Engine的原因很多,但希望App Engine應用程序訪問我們的MySQL數據庫。我發現的文檔沒有清楚地說明我是否可以做到這一點。有沒有人完成它或有指示文件顯示如何做到這一點?我可以在App Engine應用程序中使用MySQL數據庫嗎

回答

9

簡單的答案是:NO。

訪問你的MySQL的方式是通過暴露一個Web服務接口。

+0

感謝您的回答,您的意思是SOAP和RESTful Web服務嗎? – Dev 2014-06-27 06:20:33

19

您無法創建與數據庫的直接網絡連接。 overview page概述了阻止您使用Mysql的主要限制 - 在這種情況下主要的限制是「任意網絡連接」。您只能從應用程序引擎中調用http(s)調用。

JVM上運行在一個安全的「沙箱」 環境隔離的服務和保障您的 應用。 沙箱確保應用程序只能執行 的操作,而不會干擾其他應用程序的性能和可伸縮性 。例如,應用程序 不能產生線程,將數據寫入 本地文件系統或使 任意網絡連接。應用程序 也不能使用JNI或其他本地 代碼。 JVM可以執行任何在 沙箱限制內運行的Java 字節碼。

+0

我真的很想知道這個答案值得贊成,特別是在事實發生一年後。 – 2010-11-03 17:58:35

+0

這不是真的了。查看Google Cloud SQL:https://code.google.com/apis/sql/docs/developers_guide_java.html – 2011-10-22 14:06:16

+3

@lukas請注意,您仍然無法連接到外部MySql數據庫,如OP所需。您僅限於連接到App Engine託管的mysql數據庫。另外,目前您無法從App Engine外部連接到您的雲託管數據庫。 – 2011-10-22 18:31:56

1

是的,但不是正常的,通過創建Web服務或充當一個簡單的PHP頁面作爲中間數據並以json或xml傳遞數據。

0

我仍然在這一切的學習階段,但我相當肯定,你可以做到這一點,現在的一些方法:

  • 鏈接Apps腳本到App Engine和使用JDBC和墨水它谷歌
  • 商店通過電子表格的腳本
  • 連接Google Apps腳本在谷歌雲存儲中的SQL數據庫使用其雲SQL

「Google Apps腳本可以通過JDBC與Jdbc服務建立數據庫連接。目前的支持擴展到MySQL,Microsoft SQL Server和Oracle。 Apps Script可以輕鬆連接到Google Cloud SQL上託管的數據庫,但也可以與其他雲託管平臺甚至本地數據庫一起使用。「https://developers.google.com/apps-script/jdbc

(origionally從App Engine Question

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> 

使用雲



    DriverManager.registerDriver(new AppEngineDriver()); 
       c = DriverManager.getConnection("jdbc:google:rdbms://instance_name/guestbook"); 

+0

感謝您提供代碼,此代碼與開發過程中的本地MySQL實例一起工作我想知道是否有可能連接外部mysql數據庫(不是雲MySql實例)與應用程序工程(製作過程中) – Dev 2014-06-26 05:13:02

+0

號您可以使用谷歌雲。這是出於安全原因(只是他們不允許你訪問他們的Web服務)。但你可以連接谷歌雲數據庫與一些像mysql工作臺一樣的客戶端來管理你的mashine谷歌雲數據庫 – makkasi 2014-06-26 06:02:32

+0

謝謝你的回答@makkasi。 – Dev 2014-06-26 06:04:16

相關問題