简体   繁体   English

从Google App Engine Java连接到本地MySQL实例时出错。

[英]Error connecting to local MySQL instance from Google App Engine Java.

I have created a google app engine java project using the gradle build plugin. 我已经使用gradle build插件创建了一个Google App Engine Java项目。 The app engine version is 1.9.34. 应用引擎版本为1.9.34。 I am trying to connect local dev server to local mysql db for development and testing purposes. 我正在尝试将本地开发服务器连接到本地mysql数据库以进行开发和测试。 I am trying to connect local db as follows, 我正在尝试连接本地数据库,如下所示,

 try {
        Class.forName("com.mysql.jdbc.Driver");
        url = "jdbc:mysql://localhost/testDB?user=root";

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    Connection conn = null;
    try {
        conn = (Connection) DriverManager.getConnection(url, "root", "admin123$");

        String statement = "INSERT INTO entries (firstName, lastName, phoneNo, email) VALUES( ? , ? , ?, ?)";
        java.sql.PreparedStatement stmt = conn.prepareStatement(statement);
        stmt.setString(1, newContact.getFirstName());
        stmt.setString(2, newContact.getLastName());
        stmt.setString(3, newContact.getPhoneNumber());
        stmt.setString(4, newContact.getEmail());
        int success = 2;
        success = stmt.executeUpdate();
        if (success == 1) {

            System.out.println("Insert Successful");
        } else if (success == 0) {
            System.out.println("Insert error");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

But keep getting the following error, 但是不断收到以下错误,

SEVERE: exception occurred while calling backend method java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:191) at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at com.aarnam.whatsthescore.apis.AddressBookApi.createNewContact(AddressBookApi.java:67) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.google.appengine.tools.deve SEVERE:在com.google.appengine.tools.development上的java.lang.Class.forName(Class.java:191)上的java.lang.Class.forName0(本地方法)中调用后端方法java.lang.ExceptionInInitializerError时发生异常。 com.mysql.jdbc.NonRegisteringDriver.connect上com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65)的.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) (NonRegisteringDriver.java:282)java.sql.DriverManager.getConnection(DriverManager.java:571)at java.sql.DriverManager.getConnection(DriverManager.java:215)at com.aarnam.whatsthescore.apis.AddressBookApi.createNewContact( AddressBookApi.java:67)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java com.google.appengine.tools.deve上的.lang.reflect.Method.invoke(Method.java:606) lopment.agent.runtime.Runtime.invoke(Runtime.java:130) at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:363) at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113) at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 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.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.goog 位于com.google.api.server.spi.SystemServiceServlet的com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:363)上的lopment.agent.runtime.Runtime.invoke(Runtime.java:130)。在javax.servlet的javax.servlet.http.HttpServlet.service(HttpServlet.java:637)的com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71)执行(SystemServiceServlet.java:113) org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)的.http.HttpServlet.service(HttpServlet.java:717)org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java) :1166)com的com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)at com.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)。 go.com.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)位于com.goog的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) le.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:34 le.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)位于com.google.appengine.api.blobstore的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)。 dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)位于or.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)的com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter。 java:50)在org.mortbay的com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)上的.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.tools.development.DevAppServerModulesFilter .doDirectModuleRequest(DevAppServerModulesFilter.java:34 9) at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 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:98) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:513) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.hand 9)在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)在org.mortbay.jetty位于org.mortbay.jetty上的org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)的.servlet.ServletHandler.handle(ServletHandler.java:388)。(SessionHandler.java:182) )atg.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)at com.google.appengine.tools.development上的org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)。 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)上的DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)在com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java: 513),位于org.mortbay.jetty.Server.hand上的org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) le(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 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.lang.RuntimePermission" "modifyThreadGroup") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) at java.security.AccessController.checkPermission(AccessController.java:559) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerF le(Server.java:326)org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)atg.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:938)org.mortbay.jetty .httpParser.parseNext(HttpParser.java:755)位于org.mortbay的org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)。 io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)atg.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)引起:java.security.AccessControlException:access denied(“java.lang。 RuntimePermission“”modifyThreadGroup“)java.security.AccessControl.checkPermission(AccessControlContext.java:372)java.security.AccessController.checkPermission(AccessController.java:559)java.lang.SecurityManager.checkPermission(SecurityManager.java:549) )com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkPermission(DevAppServerF) actory.java:429) at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454) at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) at java.lang.Thread.init(Thread.java:391) at java.lang.Thread.init(Thread.java:349) at java.lang.Thread.(Thread.java:445) at java.util.TimerThread.(Timer.java:499) at java.util.Timer.(Timer.java:101) at java.util.Timer.(Timer.java:146) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:208) ... 53 more actory.java:429)位于java.lang.Thread的java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)的com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkAccess(DevAppServerFactory.java:454) .init(Thread.java:391)java.lang.Thread.init(Thread.java:349)java.lang.Thread。(Thread.java:445)java.util.TimerThread。(Timer.java: 499)java.util.Timer。(Timer.java:101)at java.util.Timer。(Timer.java:146)at com.mysql.jdbc.ConnectionImpl。(ConnectionImpl.java:208)... 53更多

Have been stuck at this since last few days. 自从过去几天以来一直困在这里。 Any help is appreciated. 任何帮助表示赞赏。

Thanks!! 谢谢!!

Have you added below dependency in your app engine gradle ? 您是否在App Engine Gradle中添加了以下依赖项?

compile 'mysql:mysql-connector-java:5.1.16'

If yes, you can also check to change the version of app engine to 1.9.18, it works with me, I had issues in past with version 1.9.22 and later ones. 如果是,您还可以检查将应用引擎的版本更改为1.9.18,它与我合作,我在过去的版本1.9.22及更高版本中遇到了问题。

First, make sure you have enabled MySQL Connector/J in appengine-web.xml as follows. 首先,确保在appengine-web.xml启用了MySQL Connector / J,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  ...
  <use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>

Then use something like the below code snippet to connect to the database. 然后使用类似下面的代码片段连接到数据库。

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
    // Load the class that provides the new "jdbc:google:mysql://" prefix.
    Class.forName("com.mysql.jdbc.GoogleDriver");
    url = "jdbc:google:mysql://your-project-id:your-instance-name/your-database?user=root";
} else {
    // Local MySQL instance to use during development.
    Class.forName("com.mysql.jdbc.Driver");
    url = "jdbc:mysql://127.0.0.1:3306/your-database?user=root";

    // Alternatively, connect to a Google Cloud SQL instance using:
    // jdbc:mysql://ip-address-of-google-cloud-sql-instance:3306/your-database?user=root
}

You can find more details here . 你可以在这里找到更多细节。

Actually I have tried both of the options suggested above. 实际上我已经尝试了上面提到的两个选项。 Both the changes are necessary to get the app working but the issue in my case was the mysql connector version. 这两个更改都是使应用程序正常工作所必需的,但我的案例中的问题是mysql连接器版本。 I was using 5.1.16 but then I updated it to 5.1.38 and that fixed the problem. 我使用的是5.1.16,但随后将其更新为5.1.38,从而解决了该问题。

Thank you all for your help and suggestions! 谢谢大家的帮助和建议! :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 本地机器上的MySQL谷歌应用引擎 - 错误 - MySQL google app engine at local machine - error 带有Java的Google App Engine。 无法开始:( - Google App Engine with Java. Can't start:( 通过Datanucleus REST API或某些其他Java API将Google App Engine数据存储与本地实例同步 - Synchronizing Google App Engine DataStore with local instance via Datanucleus REST API or some other Java API 从Java客户端应用程序连接到mysql实例 - Connecting to an instance of mysql on was from java client application 如何将本地Google App Engine Python数据存储区复制到本地Google App Engine Java数据存储区? - How do I copy local Google App Engine Python datastore to local Google App Engine Java datastore? 将 Java 应用程序部署到 Google App Engine,本地依赖项给出 ClassNotFoundException - Deploying Java app to Google App Engine with local dependencies giving ClassNotFoundException 尝试访问App引擎项目中的mysql local intance时出现错误“java.lang.ExceptionInInitializerError” - getting Error “java.lang.ExceptionInInitializerError” while trying to access mysql local intance in App engine project 在Java App Engine中连接到PostgreSQL - Connecting to PostgreSQL in java app engine 使用SSHJ连接到Google Compute Engine实例 - Connecting to Google Compute Engine instance using SSHJ Java中的Google App Engine API中的错误204 - error 204 in a Google App Engine API in java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM