注册的问题

注册的问题

package com.imooc.jdbc.servlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imooc.jdbc.bean.User;
import com.imooc.jdbc.service.RegistService;
public class RegistServlet extends HttpServlet{
 private RegistService registService;
 
 @Override
 public void init() throws ServletException {
  // TODO Auto-generated method stub
  super.init();
  registService = new RegistService();
 }
 
 @Override
 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String username = request.getParameter("username");
  String password = request.getParameter("password");
  String real_name = request.getParameter("real_name");
  String birthday = request.getParameter("birthday");
  String phone = request.getParameter("phone");
  String address = request.getParameter("address");
  boolean result = false;
  try {
   SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
   Date dateBirthday = simpleDateFormat.parse(birthday);
   User user = new User(username,password,real_name,dateBirthday,phone,address);
   result = registService.registUser(user);
   if (result) {
    System.out.println("注册成功");
    request.getRequestDispatcher("/login.do").forward(request, response);
   }else {
    System.out.println("注册失败");
    request.getRequestDispatcher("/regist.do").forward(request, response);
   }
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }
  
 }
}
package com.imooc.jdbc.service;
import com.imooc.jdbc.bean.User;
import com.imooc.jdbc.dao.RegistDAO;
public class RegistService {
 
 private RegistDAO registDAO;
 
 public RegistService() {
  registDAO = new RegistDAO();
 }
 
 public Boolean registUser(User user) {
  return registDAO.registUser(user);
 }
}
package com.imooc.jdbc.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.imooc.jdbc.bean.User;
import com.imooc.jdbc.common.ConnectionUtil;
public class RegistDAO {
 /**
  * 用户注册
  */
 public boolean registUser(User user) {
  Connection conn = ConnectionUtil.getConnection();
  String sql = "select username from user ";
  PreparedStatement stmt = null;
  ResultSet rs = null;
  try {
   stmt = conn.prepareStatement(sql);
   rs = stmt.executeQuery();
   // 判断数据库是否已经有该用户了
   while(rs.next()) {
    if(rs.getString("username").equals(user.getName())) {
     return false;
    }
   }
  }
  catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   ConnectionUtil.release(rs, stmt, conn);
  }
  return notRegist(user);
 }
 
 // 将注册的用户存入到数据库中
 public boolean notRegist(User user) {
  Connection conn = ConnectionUtil.getConnection();
  PreparedStatement stmt = null;
  String sql = "update user set username = ?,password = ?,real_name=?,birthday = ?,phone = ?,address = ?";
  try {
   // 若没有该用户,则将该用户存入到数据库中
   stmt = conn.prepareStatement(sql);
   stmt.setString(1, user.getName());
   stmt.setString(2, user.getPassword());
   stmt.setString(3, user.getRealName());
   stmt.setDate(4, new Date(user.getBirthday().getTime()));
   stmt.setString(5, user.getPhone());
   stmt.setString(6, user.getAddress());
   stmt.executeUpdate();
  } catch (Exception e) {
   // TODO: handle exception
  }finally {
   ConnectionUtil.release(null, stmt, conn);
  }
  
  return true;
 }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>
<html>
 <head>
  <title>登录</title>
  <link rel="stylesheet" href="<%=request.getContextPath()%>/css/reg.css">
 </head>
 <body>
  <div class="reg">
   <div class="header">
    <h1>
     <a href="<%=request.getContextPath()%>/login.do">登录</a>
     <a href="<%=request.getContextPath()%>/regPrompt.do">注册</a>
    </h1>
    <button></button>
   </div>
   <form action="<%=request.getContextPath()%>/regist.do" method="post">
    <div class="name">
     用户名:<input type="text" id="name" name="username" placeholder="请输入所要注册的用户名">
     <p></p>
    </div>
    <div class="pwd">
     密码:<input type="password" id="pwd" name="password" placeholder="6-16位密码,区分大小写,不能用空格">
     <p></p>
    </div>
    <div class="name">
     姓名:<input type="text" id="real_name" name="real_name" placeholder="请输入所要注册的姓名">
     <p></p>
    </div>
    <div class="name">
     生日日期:<input type="text" id="birthday" name="birthday" placeholder="请输入出生日期">
     <p></p>
    </div>
    <div class="name">
     手机号码:<input type="text" id="phone" name="phone" placeholder="请输入电话号码">
     <p></p>
    </div>
    <div class="name">
     地址:<input type="text" id="address" name="address" placeholder="请输入地址">
     <p></p>
    </div>
    <div class="btn-red">
     <input onclick="return checkVerificationCode();" type="submit" value="注册" id="reg-btn">
    </div>
   </form>
  </div>
 </body>
</html>

老师,这是我注册的代码,就是控制台出的是user为空,然后我去数据库中查的话也是没有查到,也就说用户没有存入到数据库。老师帮忙看看这段代码有什么逻辑错误?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

6回答
芝芝兰兰 2019-12-11 10:19:47

同学你好。老师也是刚刚注意到这里新注册的用户同学使用的是update语句,并且没有使用where。

http://img1.sycdn.imooc.com//climg/5df04e670960395507900263.jpg

而同学的表中,有对username的唯一索引,也就是username这一列不能有重复的值

http://img1.sycdn.imooc.com//climg/5df04f4509ad06e106370286.jpg

因为原有的表中有三条数据,更新语句又没有where条件,所以会对三条内容都进行更新,也就出现了username重复的情况了。

http://img1.sycdn.imooc.com//climg/5df0516b091e94eb10450287.jpg

建议同学修改注册用户的SQL语句,在user表中新增一条数据即可。不用进行更新。

抱歉老师之前也没有注意到这个SQL语句本身。所以一直没能定位问题,耽误同学的时间了。

如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 Levinson #1
    好了老师,谢谢老师,我也是很粗心,犯了这么一个低级的错误!
    2019-12-11 10:36:19
提问者 Levinson 2019-12-10 21:42:52
提问者 Levinson 2019-12-10 21:42:03
提问者 Levinson 2019-12-10 17:55:02

http://img1.sycdn.imooc.com//climg/5def6b6d0988256b13700330.jpg

老师报的这个异常

  • 同学你好。这个异常是索引重复,同学是不是给username加了唯一索引?看一下自己的数据库中username列是否有值为levinson的项呢?或者是临时修改了auto_increment的值,使下一个自增的id在表中已存在呢?祝学习愉快~
    2019-12-10 18:38:17
  • 提问者 Levinson 回复 芝芝兰兰 #2
    老师,数据库中没有我添加的用户,数据表是我按照老师的视频创建的。
    2019-12-10 21:41:38
芝芝兰兰 2019-12-10 11:24:26

同学你好。

1、用户没有存入到数据库:

这边尝试同学的代码,是可以正常插入的:

http://img1.sycdn.imooc.com//climg/5def0ad7091a60a717640871.jpg

同学说user为空,是说username,password 等属性没有获取到吗?同学的页面中,给提交按钮绑定了onclick事件onclick="return checkVerificationCode();",但没有JS代码实现,有可能会造成提交不成功。同学可以先确定一下是否提交成功了。


2、注册页面的白色的背景

将reg元素的高度改大一些就可以了。注意重启后清除浏览器缓存再访问。在浏览器中使用Ctrl+Shift+Delete清除缓存

http://img1.sycdn.imooc.com//climg/5def0fa5090ce90417280806.jpg

如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 提问者 Levinson #1
    不是老师,我的意思是,这个用户user没有存到数据库,因为登录的那里有打印用户user,所以打印出来的user是null。我把注册的那个onclick给去掉了。还是不可以
    2019-12-10 16:08:42
  • 芝芝兰兰 回复 提问者 Levinson #2
    同学你好。在notRegist方法中,同学可能发生了异常,但catch里没有输出这个异常。同学可以在catch中添加e.printStackTrace();然后看看发生了什么异常?是不是数据库连接有什么问题。祝学习愉快~
    2019-12-10 17:42:37
提问者 Levinson 2019-12-09 20:02:59

http://img1.sycdn.imooc.com//climg/5dee37a10984fac709570886.jpg

http://img1.sycdn.imooc.com//climg/5dee37d1098bfe9c04680308.jpg

然后还有一个问题是:就是注册的页面,这个白色的背景应该要怎么改,我改了高度没有反应

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师