java - 为什么 Google App Engine JDBC 连接 URL 不起作用?

标签 java mysql jsp google-app-engine servlets

我正在开发一个带有注册页面的网站。我想将用户详细信息存储在 Google App Engine 上的 MySQL 数据库表中。以下是 JDBC 连接 URL:-

Connection  con = DriverManager.getConnection("jdbc:mysql://google/my_database_name?cloudSqlInstance=my_db_instance&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=My_Username&password=My_Password&useSSL=false", "root", "My_Password");

但此 URL 无法使用,因为即使在注册后,我的数据库表中也没有存储任何详细信息。因此,请提出任何替代方案。谢谢

以下是 RegistrationServlet 代码,它从 Register.jsp 获取输入值,我希望它将这些值存储到我的 gcloud 数据库表中:-

  @WebServlet("/RegistrationServlet")
public class RegistrationServlet extends HttpServlet {
 private static final long serialVersionUID = 1 L;

 public RegistrationServlet() {
  super();

 }

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {

 }

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {

  PrintWriter out = response.getWriter();

  String first_name = request.getParameter("f1");
  String last_name = request.getParameter("l1");
  String phone = request.getParameter("p1");
  String email = request.getParameter("e1");
  String uname = request.getParameter("uname");
  String user_dob = request.getParameter("udate");
  String password = request.getParameter("pwd");



  UserData ud = new UserData();

  ud.setFirst_name(first_name);
  ud.setLast_name(last_name);
  ud.setUname(uname);
  ud.setPhone(phone);
  ud.setEmail(email);
  ud.setUser_dob(user_dob);
  ud.setPassword(password);

  // validate given input
  if (first_name.isEmpty() || last_name.isEmpty() || phone.isEmpty() || email.isEmpty() || password.isEmpty()) {
   RequestDispatcher rd = request.getRequestDispatcher("Register.jsp");
   out.println("<font color=red>Please fill all the fields</font>");
   rd.include(request, response);
  } else {
   try {
    Class.forName("com.mysql.jdbc.Driver");
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   // loads mysql driver



   try {
    Connection con = DriverManager.getConnection("jdbc:mysql://google/my_database_name?cloudSqlInstance=my_db_instance&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=My_Username&password=My_Password&useSSL=false", "root", "My_Password");


    String query = "insert into users values(?,?,?,?,?,?,?)";

    PreparedStatement ps = con.prepareStatement(query); //generates sql query



    ps.setString(1, first_name);


    ps.setString(2, last_name);


    ps.setString(3, uname);


    ps.setString(4, phone);


    ps.setString(5, email);


    ps.setString(6, user_dob);


    ps.setString(7, password);



    ps.executeUpdate();

    System.out.println("successfully inserted");



    ps.close();




    con.close();




   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   HttpSession session = request.getSession();
   session.setAttribute("username", first_name);
   response.sendRedirect("Success.jsp");



  }
 }

最佳答案

我关注了 GCP CloudSQL for MySQL connection example它在部署后有效。我将逐步执行我执行的过程,这样您就可以进行比较,看看您是否遗漏了一些配置步骤。

  1. 使用了 MySQL 第二代 Cloud SQL 实例。此实例与我将在其中部署脚本的 Google App Engine 位于同一项目

  2. 在 CloudSQL 实例中创建了一个新数据库

  3. 运行命令 gcloud sql instances describe instance1<MY-PROJECT>:<REGION>:<INSTANCE-NAME> 的形式获取实例连接名称

  4. 下载 GCP Java 代码示例并获取 Java 8 App Engine 标准 Cloud SQL 示例:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/appengine-java8/cloudsql/

  5. 完成字段 <INSTANCE_CONNECTION_NAME> , <user> , <password><database>来自 POM包含我的案例的连接值的文件。 appengine-web.xml 将使用此字段创建cloudsql CloudSqlServlet.java 中的代码将用作连接 URL 的属性

  6. 也在appengine-web.xml , 我改变了 <service>名称为 default .这个文件实际上不需要更改任何内容,但由于个人喜好,我选择更改服务

  7. other required dependencies已经在下载的地方 POM

  8. 使用 mvn appengine:deploy 部署到 GAE

这是适用于 MySQL 的 GAE 到 Cloud SQL 连接的最小示例。尝试按照以下步骤测试连接是否适用于提供的代码示例。

关于java - 为什么 Google App Engine JDBC 连接 URL 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595803/

相关文章:

sql - 如何从 MySQL 的一系列行中随机选择 16 条记录?

java - HTML : Form does not send UTF-8 format inputs

java - 我从 "Scanner"的输入没有被记录?什么都不返回

java - 为什么 ChangeListener 从未在本地使用?

java - 在 SQL 查询中使用 'true' 而不是 true 会产生意外结果

mysql - 如何设置默认字符集?

java - 如何在jsp中创建干净的url和MVC?

java - 在循环内准备语句

java - swt 浏览器不再处理错误

java - 如何修复上传操作上的 UnknownHostException