我有两个HTML表单: 1。注册/登录2。用户获得登录后,他经常更新他的详细信息。
我使用MySql数据库来保存用户的登录详细信息。此外,我还有另一张表格,用于在他登录后更新他的详细信息。
我在注册/登录过程中获得了成功。但是这里出现了问题……我不知道如何继续下去。在他的登录之后,用户应该能够在他各自的表中更新他的详细信息。
这里是我的Login Servlet,它在用户获得登录后从第一个主登录表单获取信息。然后是另一个HTML表单,用户在其中输入他的个人详细信息。该表单存储在另一个表中。出现了问题。我无法在第二个表中处理用户的详细信息。
登录Servlet:
package com.ea.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class Register extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String mem = request.getParameter("mem");
try{
//loading drivers for mysql
Class.forName("com.mysql.jdbc.Driver");
//creating connection with the database
Connection con=DriverManager.getConnection
("jdbc:mysql://localhost:3306/EATWO","root","");
Statement statement = (Statement) con.createStatement();
ResultSet rs = statement.executeQuery("SELECT * from singer where name='" + name + "'");
String duplicate = null;
while(rs.next()){
duplicate = rs.getString(1);
}
if(duplicate == null){
PreparedStatement ps=con.prepareStatement
("insert into Singer(name,password,member) values(?,?,?)");
ps.setString(1, name);
ps.setString(2, pass);
ps.setString(3, mem);
int i=ps.executeUpdate();
if(i>0)
{
out.println("You are sucessfully registered");
}
}
else{
//request.getRequestDispatcher("/register.html").forward(request, response);
//request.setAttribute("error","Invalid Username/password");
request.getRequestDispatcher("/register_err.html").forward(request, response);
}
}
catch(Exception se)
{
se.printStackTrace();
}
}这段代码是要说的.我希望这个服务器得到纠正,因为你的suggestions..Here是第二个SubForm。在用户登录后,这个代码帮助用户存储他的个人信息。但是我被困在这里了。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class Register extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String mem = request.getParameter("mem");
try{
//loading drivers for mysql
Class.forName("com.mysql.jdbc.Driver");
//creating connection with the database
Connection con=DriverManager.getConnection
("jdbc:mysql://localhost:3306/EATWO","root","");
Statement statement = (Statement) con.createStatement();
ResultSet rs = statement.executeQuery("SELECT * from singer where name='" + name + "'");
String duplicate = null;
while(rs.next()){
duplicate = rs.getString(1);
}
if(duplicate == null){
PreparedStatement ps=con.prepareStatement
("insert into Singer(name,password,member) values(?,?,?)");
ps.setString(1, name);
ps.setString(2, pass);
ps.setString(3, mem);
int i=ps.executeUpdate();
if(i>0)
{
out.println("You are sucessfully registered");
}
}
else{
//request.getRequestDispatcher("/register.html").forward(request, response);
//request.setAttribute("error","Invalid Username/password");
request.getRequestDispatcher("/register_err.html").forward(request, response);
}
}
catch(Exception se)
{
se.printStackTrace();
}}
发布于 2015-09-02 03:49:24
Class.forName("com.mysql.jdbc.Driver");//创建与数据库连接con=DriverManager.getConnection的连接(“jdbc:mysql://localhost:3306/com.mysql.jdbc.Driver”、"root“、"");
为了池的缘故,您相信共享对象吗?更糟糕的是,您没有关闭Connection、Statements、ResultSets!
ResultSet rs =statement.executeQuery(“name=‘+ name +’‘”);
太危险了(Sql),使用PreparedStement代替您对其余部分的使用。
这
String duplicate = null;
while(rs.next()){
duplicate = rs.getString(1);
}
if(duplicate == null){
PreparedStatement ps=con.prepareStatement
("insert into Singer(name,password,member) values(?,?,?)");
ps.setString(1, name);
ps.setString(2, pass);
ps.setString(3, mem);
int i=ps.executeUpdate();
if(i>0){
out.println("You are sucessfully registered");
}
}可能是这样的
if(!rs.next()){
PreparedStatement ps=con.prepareStatement
("insert into Singer(name,password,member) values(?,?,?)");
ps.setString(1,name);ps.setString(2,pass);ps.setString(3,mem);
int i=ps.executeUpdate();
if(i>0){
response.redirect("<<update_cgi_path_here>>");return;
}
}成功注册用户之后,将他重定向到使用redirect(path:String):void方法更新页面,如下所示
response.redirect("/update__info");return;
Awesomeness:
您select一条记录,如果第一条记录不存在,则insert一条记录!
C'mon这种逻辑是什么!整个记录插入(持久化新用户)应该通过一个外部/SQL调用来完成。
您的代码有很好的数据不一致性潜力(据我所知,sql数据结构中发生了什么),因为它不是线程安全的。
就像注册页面一样,您可能有一个html页面,用户可以提供它的信息,只需从请求中获取参数(就像寄存器一样),并在后端数据源上更新用户数据。
但是首先请有一个数据库连接池,使用PreparedStatement over Statement(如果需要设置什么),有一些后端sql函数来检查和插入用户(而不是多个调用),相信关闭Closeables(只使用try(<<closeable>>){})。
https://stackoverflow.com/questions/32332678
复制相似问题