【发布时间】:2019-03-06 20:10:03
【问题描述】:
我正在开发一个带有注册页面的网站。我想将用户详细信息存储在 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 也无法正常工作,我的数据库表中没有存储任何详细信息。因此,请提出任何替代方案。谢谢
以下是从 Register.jsp 获取输入值的 RegistrationServlet 代码,我希望它将值存储到我的 gcloud db 表中:-
@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");
}
}
【问题讨论】:
-
在 URL 中,属性
cloudSqlInstance具有my_db_instance作为值。您能否确认该值为instance_connection_name(例如:<MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>)?另外,您遵循什么示例来建立连接?你是在本地测试吗?我建议按照GCP CloudSQL for MySQL 连接示例使用一个简单的应用程序来测试连接是否有效 -
这里我没有提到我的确切数据库实例。 my_db_instance 仅供您参考。是的,我在本地对其进行了测试,并且在那里运行良好。我正在关注官方的 Google Cloud 文档。谢谢,但我正在关注您提到的同一来源的文档。
标签: java mysql jsp google-app-engine servlets