我正在开发带有注册页面的网站。我想将用户详细信息存储在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 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");
}
}
答案 0 :(得分:1)
我遵循了GCP CloudSQL for MySQL connection example,并且在部署后一直有效。我将逐步完成我所做的过程,以便您可以进行比较,看看最后是否缺少一些配置步骤。
gcloud sql instances describe instance1
以<MY-PROJECT>:<REGION>:<INSTANCE-NAME>
下载了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/
使用我的案例的连接值完成了<INSTANCE_CONNECTION_NAME>
文件中的字段<user>
,<password>
,<database>
和POM
。 appengine-web.xml
将使用此字段来创建cloudsql
属性,该属性将被CloudSqlServlet.java
我还在appengine-web.xml
中将<service>
的名称更改为default
。实际上不需要更改此文件上的任何内容,但由于个人喜好,我选择更改服务
POM
中已经存在的other required dependencies mvn appengine:deploy
部署到GAE 这是适用于MySQL的GAE到Cloud SQL连接的最小示例。尝试按照以下步骤操作,以使用提供的代码示例测试连接是否可以正常工作。