基本上是通过eclipsejavaweb项目连接到我的云sql数据库
检查表
1) 将我的google app engine sdk更新至最新的1.9.34版本
2) 将我的jdbc com.mysql.jdbc.driver更新到最新的5.1.38版本
3) 将jdbc驱动程序添加到构建路径
我根本无法连接到google cloud sql,因此出现以下错误:
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(DevAppServerFactory.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.<init>(Thread.java:445)
at java.util.TimerThread.<init>(Timer.java:499)
at java.util.Timer.<init>(Timer.java:101)
at java.util.Timer.<init>(Timer.java:146)
at com.mysql.jdbc.ConnectionImpl.<clinit>(ConnectionImpl.java:208)
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:283)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:233)
at com.dinuka.myapp.servlets.PlanServlet.doPost(PlanServlet.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
搜索了一整天,逐字逐句地浏览了stackoverflow上的所有相关问题。我要把头发拔出来了:d
下面是我连接数据库的简单代码。不敢相信我做错了什么:
public class MyServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String url = null;
try {
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://app_id:instance_id/data?user=root";
} else {
// Local MySQL instance to use during development.
Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://instance-ip:3306/data?user=root";
}
} catch (Exception e) {
e.printStackTrace();
return;
}
PrintWriter out = resp.getWriter();
try {
Connection conn = DriverManager.getConnection(url);
System.out.println("Connection established");
out.println("Connection established");
try {
} finally {
conn.close();
}
} catch (SQLException e) {
out.append(e.getMessage());
e.printStackTrace();
}
}
}
请修复这个错误,谷歌团队!同时,有人能帮我渡过难关吗?
1条答案
按热度按时间nzk0hqpo1#
终于!修好了!任何一个面对这个问题的人。下面是你如何修复它的!
第一步:保持你的道德和保持积极(相信我,我知道)
第二步:将你的google应用引擎sdk更新到最新版本。从这个链接查看最新的sdk=>https://cloud.google.com/appengine/downloads
步骤3:将jdbc驱动程序更新到最新版本。检查此链接的最新版本=>https://dev.mysql.com/downloads/connector/j/
步骤4:下面是如何正确地将JDBCJAR添加到项目中:复制并粘贴到lib文件夹(war/webinf/lib)。右键单击eclipse项目,然后单击buildpath->configurebuildpath。单击“addjars”,转到lib文件夹,选择刚才复制的mysql连接器java文件。单击应用并确定。
步骤5:清理并构建项目
第六步:我不知道这是否必要,但我们还是这样做吧。右键单击项目并转到属性。
第7步:展开“google”部分并选择appengine。确保googlecloudsql已启用(选中),并选择usecloudsqlinstance单选按钮。
第8步:在单选按钮的右边,您将看到一个名为“configure”的链接。单击它并用示例名、数据库名等填充字段,然后单击ok。
步骤9:在我们前面看到的单选按钮下面,您应该看到另一个名为configure的链接,旁边是一个名为“appenginesqlinstance”的标签。单击configure并用示例名称、db名称等填充字段,就像我们以前做的那样。单击“确定”并关闭“属性”窗口。
最后一步:清理并再次构建项目并运行它。如果您正确地遵循了所有步骤,那么您应该连接到强大的google云。
我花了太多的时间来解决这个问题,我知道我可以用这个答案简化别人的一天。祝你好运!
-dinuka jayasuriya,未来的谷歌人;)