【问题标题】:Connect MySQL with Google App Engine with Eclipse使用 Eclipse 将 MySQL 与 Google App Engine 连接起来
【发布时间】:2012-04-21 01:38:50
【问题描述】:

我是 Google App Engine 的新手,我需要使用 GAE 制作应用程序。

我希望数据库是 MySQL。我在 Google Cloud SQL 中注册了有限的​​预览版,但我想同时在本地(离线)工作。即使我还没有访问 Google Cloud SQL 的权限,这可能吗?如果是这样,您能否向我提供 JDBC 脚本来实现这一点?以及任何需要的库。

我通常用这个连接到本地数据库:

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

【问题讨论】:

  • 你现在有什么问题?
  • 以下错误和没有连接到本地数据库 "java.lang.ClassNotFoundException: com.mysql.jdbc.Driver An Exception has occurred!java.lang.NullPointerException"
  • mysql驱动jar在WEB-INF/lib吗?
  • 不,我现在添加这个 jar mysql-connector-java-5.1.19-bin 我现在有这个错误“发生异常!java.lang.NullPointerException”所以仍然无法工作
  • 好的,必须有一个堆栈跟踪告诉你发生了什么......没有这些信息,任何人都无法帮助你。不过有一件奇怪的事情:你定义了url 两次。

标签: java mysql google-app-engine jdbc


【解决方案1】:
>> Could not create connection to database server.
>> access denied ("java.net.SocketPermission" "localhost" "resolve")

应用引擎不允许您打开套接字,这是理所当然的。部署后,您将永远无法访问此类低级机制。

在此处记录:https://developers.google.com/appengine/docs/java/runtime#The_Sandbox

App Engine 应用程序无法打开套接字或访问其他主机 直接

【讨论】:

  • 我正在使用 phpmyadmin 并且我删除了密码以更快地登录,因为它是个人的我检查了用户名/密码没有错误并且数据库名称是正确的;我还检查了我之前在 eclipse 中创建的另一个项目,它正在工作并访问数据库,我在这里和那里有相同的文件?会不会是因为它是 Google App Engine 应用程序?
  • 是的,我显然在您阅读后不久修改了我的答案;-)
  • 那我该怎么办?这是否意味着我无法在本地测试应用程序?
  • 应用引擎自带数据库,根本不适合与 MySQL 一起使用。见:stackoverflow.com/questions/1651629/…
  • 今年年初,Google 发布了基于 MySQL 的 CloudSQL 进行测试,允许在开发过程中连接本地 MySQL 数据库。我不确定你是否正在测试它。说明还说您可以使用 EclipseLink 连接到 JPA 2.0。 developers.google.com/eclipse/docs/cloudsql-jpatools.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多