2013-07-20 31 views
3

我正在用Google App Engine编程本地机器并将MySql连接到我的项目,并且当我尝试连接到mysql时出现错误。有什么想法? 谷歌搜索只给了一个类似的事情: https://dba.stackexchange.com/questions/45029/mysql-exception-after-upgrading-from-java-6-to-java-7在本地机器上的MySQL谷歌应用程序引擎 - 错误

INFO: Dev App Server is now running 
java.sql.SQLException: Unable to initialize driver properties due to java.lang.IllegalAccessException: Class com.google.appengine.tools.development.agent.runtime.Runtime can not access a member of class com.mysql.jdbc.ConnectionPropertiesImpl with modifiers "private" 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 
at com.mysql.jdbc.ConnectionPropertiesImpl.initializeProperties(ConnectionPropertiesImpl.java:2819) 
at com.mysql.jdbc.ConnectionImpl.initializeDriverProperties(ConnectionImpl.java:3490) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:823) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:127) 
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:135) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at ru.onekilometre.SQLConnectionProvider.getInstance(SQLConnectionProvider.java:18) 
at ru.onekilometre.OnekilometreServlet.doGet(OnekilometreServlet.java:19) 
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.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:123) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.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:43) 
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.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369) 
at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352) 
at com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115) 
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:97) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:480) 
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) 

连接代码:

package ru.onekilometre; 

import java.sql.DriverManager; 

import com.google.cloud.sql.jdbc.Connection; 


public class SQLConnectionProvider { 
public static Connection connection; 
public static Connection getInstance() throws Exception { 

     if (connection != null && !connection.isClosed()) { 
     return connection; 
     } 
    // if (true) { 
     //MySQL 
     String url = "jdbc:mysql://localhost:3306/onekilometre"; 
     connection = (Connection) DriverManager.getConnection(url, "raiym", "password"); 
    /* } else { 
     // Google Cloud SQL 
     DriverManager.registerDriver(new AppEngineDriver()); 
     String instanceName = "somename"; 
     connection = (Connection) DriverManager.getConnection("jdbc:google:rdbms://" + instanceName + "/NAME_DB"); 
     }*/ 
     return connection; 
    } 

}

+0

您使用的是什么Java版本/ GAE SDK版本? –

+0

jre 1.7.0,gae 1.8.1 – raiym

+0

1.7.0?不是1.7.0_25或类似的? –

回答

2

你应该改变你的连接字符串从:

"jdbc:mysql://localhost:3306/onekilometre" 

到 “的jdbc:谷歌:RDBMS:// INSTANCE_NAME /数据库”

,你与你的谷歌云SQL实例名称替换instance_namedatabase与您的数据库名称。见https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide#connect_and_post。举例来说,在我的应用我有:

"jdbc:google:rdbms://namibiaonthenet:namibiaonthenet/barcodeapp" 

App Engine的自动替换该字符串,如果你按照你要的项目属性时,设置设置在本地服务器上运行,以连接到本地MySQL实例| Google | App Engine |谷歌可以SQL,然后点击Configure。请记住选择Use MySQL instance单选按钮。

无需每次都更改连接字符串!如果你在本地运行,你的本地实例将被使用。如果您从Google服务器运行,则会使用云实例。

+0

它适合我!谢谢 – raiym

6

像Jaochim伤心问题是与jre1.7.0_25 我重新安装到jre1.7.0 _21,它的工作原理。 谢谢。

+0

raiym我坚持这个解决方案,我已经尝试了解决方案,这是被认为是答案,但它不工作,你能告诉我哪种方法适合你 –

+0

你好。我放弃了MySQL,并且像弗洛里斯一样伤心。我付了云SQL实例并在Eclipse Project - > Properties - > App Engine上启用并启用Google Cloud SQL。但另一种方式(免费)它使用数据存储,而不是谷歌云SQL。 https://developers.google.com/appengine/docs/java/datastore/ – raiym

+1

这也适用于我。我在jdk1.7.0_25上。升级到jdk1.7.0_51固定的东西给我。 – Charles

1

我与jre1.7.0_25有同样的问题,并通过升级到jre1.7.0_45来解决它。

相关问题