2012-04-21 70 views
0

我是Google App Engine的新手,需要使用GAE創建應用程序。使用Eclipse將Google與Google App Engine連接

我希望數據庫是MySQL。我在Google Cloud SQL中註冊了有限的​​預覽,但我想在本地(離線)同時工作。即使我還沒有訪問Google Cloud SQL,這是否可能?如果是這樣,你能否給我提供JDBC腳本來實現這一點?如果需要的話還有任何庫。

我通常這種連接到本地DB:

package acc; 


import java.sql.*; 
import com.google.appengine.api.rdbms.AppEngineDriver; 

import java.io.IOException; 
import java.sql.*; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* provide database connection 
*/ 
public class dbConnection { 

    static Connection conn; 
    static String url; 

    public static Connection getConnection() 
    { 

     try 
     { 
      String url = "jdbc:mysql://localhost:3306/gp"; 


      Class.forName ("com.mysql.jdbc.Driver").newInstance(); 

     try 
     { 
      String userName = "root"; 
      String password = ""; 


      conn = DriverManager.getConnection (url, userName, password); 
      System.out.println ("Database connection established"); 
     } 
     catch (Exception e) 
     { 
      System.err.println ("Cannot connect to database server"); 
     } 
     } 

     catch(ClassNotFoundException e) 
     { 
     System.out.println(e); 
     } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return conn; 
} 
} 

非常感謝

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:126) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:134) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2464) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2207) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:797) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:126) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:134) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) 
    at java.sql.DriverManager.getConnection(DriverManager.java:579) 
    at java.sql.DriverManager.getConnection(DriverManager.java:221) 
    at acc.dbConnection.getConnection(dbConnection.java:35) 
    at acc.DAO.getEmpList(DAO.java:40) 
    at acc.SelectEmpServlet.doGet(SelectEmpServlet.java:27) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:369) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost" "resolve") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366) 
    at java.security.AccessController.checkPermission(AccessController.java:555) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:252) 
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1048) 
    at java.net.InetAddress.getAllByName0(InetAddress.java:1203) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1127) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1063) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:247) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:298) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2385) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2422) 
    ... 48 more 
java.lang.NullPointerException 
+0

什麼問題,你現在有另一臺主機 ? – 2012-04-21 01:53:05

+0

下面的錯誤,並沒有連接到本地數據庫「java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 發生了一個異常!java.lang.NullPointerException」 – user1031152 2012-04-21 01:53:57

+0

是在'WEB-INF的mysql驅動程序jar嗎?/lib'? – 2012-04-21 01:54:45

回答

0
>> Could not create connection to database server. 
>> access denied ("java.net.SocketPermission" "localhost" "resolve") 

的App Engine是不允許你打開插座,這是理所當然的。部署時,您永遠不會訪問這樣的低級別機制。

這裏記載:https://developers.google.com/appengine/docs/java/runtime#The_Sandbox

App Engine應用程序無法打開套接字或直接訪問

+0

我使用phpmyadmin和我刪除密碼以更快登錄,因爲它是個人我檢查用戶名/密碼沒有錯,數據庫名稱是正確的;我也檢查了另一個項目在日食我做早些時候它的工作和訪問數據庫,我有同樣的文件在這裏和那裏?是否因爲它是Google App Engine應用程序? – user1031152 2012-04-21 03:49:41

+0

是的,我在閱讀後很快就修改了我的答案;-) – 2012-04-21 03:55:23

+0

那我該怎麼辦?這是否意味着我無法在本地測試該應用程序? – user1031152 2012-04-21 04:00:56