Почему не работает URL-адрес подключения JDBC Google App Engine? - PullRequest
0 голосов
/ 01 октября 2018

Я занимаюсь разработкой веб-сайта со страницей регистрации.Я хочу сохранить данные пользователя в таблице базы данных MySQL на Google App Engine.Ниже приведен URL-адрес подключения JDBC: -

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");



  }
 }

1 Ответ

0 голосов
/ 03 октября 2018

Я последовал примеру GCP CloudSQL для MySQL , и он работал после развертывания.Я пойду шаг за шагом к процессу, который я проделал, чтобы вы могли сравнить и посмотреть, не пропущен ли какой-либо шаг настройки на вашем конце.

  1. Использовал экземпляр SQL MySQL 2nd Gen Cloud.Этот экземпляр находится в том же проекте , что и Google App Engine. Я разверну сценарий в
  2. . Создаю новую базу данных в экземпляре CloudSQL
  3. . Выполните команду * 1012.* чтобы получить имя соединения с экземпляром в виде <MY-PROJECT>:<REGION>:<INSTANCE-NAME>
  4. Загрузил примеры кода Java GCP и получил пример стандартного облачного SQL Java 8 App Engine:

    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, которое будет использоваться в качестве URL-адреса соединения с кодом в CloudSqlServlet.java

  6. Также в appengine-web.xml я изменил имя <service> на default.На самом деле нет необходимости что-либо менять в этом файле, но я решил сменить услугу из-за личных предпочтений

  7. других необходимых зависимостей , где уже в загруженном POM
  8. Развертывание в GAE с mvn appengine:deploy

Это минимальный пример работающего соединения GAE с облачным SQL для MySQL.Попробуйте выполнить следующие действия, чтобы проверить, работает ли подключение всплывающим образом с предоставленным примером кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...