Java实现用户注册功能

涎涎原创约 4646 字大约 15 分钟...JavaJava

Java实现用户注册功能

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

my12306_tab_user用户表

列名数据类型可否为空说明
idnumber(11)not nullid(Parimary主键)
usernamevarchar2(30)not null用户名(Unique唯一)
passwordvarchar2(50)not null密码
rulevarchar2(2)not null权限(1 管理员 2 普通用户)
realnamevarchar2(50)not null真实姓名
sexchar(1)not null性别(1 男 2 女)
citynumber(11)not null城市信息id值((Foreign外键my12306_tab_city))
cert_typenumber(11)not null证件类型(1二代身份证2港澳通行证3台湾通行证4护照)(Foreign外键my12306_tab_certtype)
certvarchar2(50)not null证件号码
birthdaydatenot null生日
user_typenumber(11)not null旅客类型(1成人2儿童3学生4残疾军人、伤残人民警察)((Foreign外键my12306_tab_usertype))
contentvarchar2(3000)null备注信息
statuschar(1)not null用户状态(0 无效 1 有效)
login_ipvarchar2(50)not null登陆IP
image_pathvarchar2(200)not null用户头像路径

实体类 Users.java

package net.ptcs.my12306.entity;

import java.util.Date;

/**
 * 用户实体类
 * @author hp
 */
public class Users {
	private Integer id;
	private String username;
	private String password;
	private String rule;// 1、管理员 2、普通用户
	private String realname;
	private Character sex;//性别(1、男 2、女)
	private City city;
	private CertType certtype;//证件类型1、二代身份证 2、港澳通行证 3、台湾通行证 4、护照
	private String cert;//证件号码
	private Date birthday;
	private UserType usertype;
	private String content;
	private Character status;//用户状态(0、无效  1、有效 )
	private String loginIp;
	private String imagePath;
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getRule() {
		return rule;
	}
	public void setRule(String rule) {
		this.rule = rule;
	}
	public String getRealname() {
		return realname;
	}
	public void setRealname(String realname) {
		this.realname = realname;
	}
	public Character getSex() {
		return sex;
	}
	public void setSex(Character sex) {
		this.sex = sex;
	}
	public City getCity() {
		return city;
	}
	public void setCity(City city) {
		this.city = city;
	}
	public CertType getCerttype() {
		return certtype;
	}
	public void setCerttype(CertType certtype) {
		this.certtype = certtype;
	}
	public String getCert() {
		return cert;
	}
	public void setCert(String cert) {
		this.cert = cert;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public UserType getUsertype() {
		return usertype;
	}
	public void setUsertype(UserType usertype) {
		this.usertype = usertype;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Character getStatus() {
		return status;
	}
	public void setStatus(Character status) {
		this.status = status;
	}
	public String getLoginIp() {
		return loginIp;
	}
	public void setLoginIp(String loginIp) {
		this.loginIp = loginIp;
	}
	public String getImagePath() {
		return imagePath;
	}
	public void setImagePath(String imagePath) {
		this.imagePath = imagePath;
	}
	public Users() {
		super();
	}
	public Users(Integer id, String username, String password, String rule,
			String realname, Character sex, City city, CertType certtype,
			String cert, Date birthday, UserType usertype, String content,
			Character status, String loginIp, String imagePath) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.rule = rule;
		this.realname = realname;
		this.sex = sex;
		this.city = city;
		this.certtype = certtype;
		this.cert = cert;
		this.birthday = birthday;
		this.usertype = usertype;
		this.content = content;
		this.status = status;
		this.loginIp = loginIp;
		this.imagePath = imagePath;
	}
	@Override
	public String toString() {
		return "Users [id=" + id + ", username=" + username + ", password="
				+ password + ", rule=" + rule + ", realname=" + realname
				+ ", sex=" + sex + ", city=" + city + ", certtype=" + certtype
				+ ", cert=" + cert + ", birthday=" + birthday + ", usertype="
				+ usertype + ", content=" + content + ", status=" + status
				+ ", loginIp=" + loginIp + ", imagePath=" + imagePath + "]\n";
	}
	public Users(String username, String password, Character sex, Date birthday) {
		super();
		this.username = username;
		this.password = password;
		this.sex = sex;
		this.birthday = birthday;
	}
}

注册页面 user_register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!-- 使用jstl:java standard tag library(单词缩写)
 1.需要先导入jstl.jar包 2.页面通过指令引入标签  3.使用标签 -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>注册信息</title>
	<link href="css/css.css" rel="stylesheet" type="text/css">
</head>
<%
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
%>

<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
	<form action="<%=request.getContextPath()%>/UserServlet" method="post">
		<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
			<tr>
				<td colspan="2" background="images/ny_top_img_bg.gif"><img src="images/ny_top_img.gif" width="650"
						height="108">
				</td>
			</tr>
			<tr>
				<td width="75" height="23" bgcolor="#deedf8">&nbsp;</td>
				<td width="958" align="left" bgcolor="#deedf8" class="text_cray1">当前位置:注册信息
				</td>
			</tr>
		</table>
		<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
			<tr>
				<td background="images/bg_point_write.gif">
					<table width="835" border="0" align="center" cellpadding="0" cellspacing="0">
						<tr>
							<td height="30" colspan="2" align="center">&nbsp;</td>
						</tr>
						<tr>
							<td width="41" height="7" align="center">&nbsp;</td>
							<td width="794" height="30" align="left" valign="top"><span
									class="text_blod_title">注册信息</span></td>
						</tr>
						<tr>
							<td height="15" colspan="2" align="center"><img src="images/lineJava_52_1.jpg" width="835"
									height="6"></td>
						</tr>
						<tr>
							<td colspan="2">
								<table width="100%" border="0" cellspacing="0" cellpadding="0">
									<tr>
										<td width="5%">&nbsp;</td>
										<td width="95%" align="left" class="text_cray">注:标有 <span
												class="text_red">*</span> 处,均为必填项
										</td>
									</tr>
									<tr>
										<td height="15" colspan="2">
											<span class="text_red">
												<%--      <%=request.getAttribute("message")==null?"":request.getAttribute("message") %>
												--%>
												${message}
											</span>
										</td>
									</tr>
								</table>
								<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
									<tr>
										<td height="30" colspan="4" align="left" class="text_red1"><span
												class="text_title">登录信息</span></td>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red">*</td>
										<td width="98" height="40" align="left" class="text_cray1">登录名:</td>
										<td width="160" align="left" class="text_cray1"><input name="username"
												type="text" class="text_cray" id="textfield2" />
											<span id="span_username"></span>
										</td>
										<td width="423" height="35" align="left" class="text_cray">
											由字母、数字或“_”组成,长度不少于6位,不多于30位</td>
										<script>
											let btn_username = document.querySelector("#textfield2");
											//定义XMLHttpRequest对象
											let xmlHttpRequest;
											btn_username.onblur = () => {
												//alert();
												//把ajax引擎对象XMLHttpRequest实例化
												xmlHttpRequest = null;
												if (window.XMLHttpRequest) {// code for all new browsers
													xmlHttpRequest = new XMLHttpRequest();
												} else if (window.ActiveXObject) {// code for IE5 and IE6
													xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
												} else {
													//alert("Your browser does not support XMLHTTP.");
												}

												//创建ajax引擎对象之后需要做什么?

												//2.需要获取用户名
												let username = document.querySelector("#textfield2").value;
												//1.需要创建一个请求url
												xmlHttpRequest.open("get", "CheckNameServlet?username=" + username, true);


												//3.需要指定回调函数
												//刚开始readyState是0
												xmlHttpRequest.onreadystatechange = () => {  	//获取校验结果的回调函数
													//alert("发送之后:"+xmlHttpRequest.readyState);//1,2,3,4
													if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {
														let span_username = document.querySelector("#span_username");
														if (xmlHttpRequest.responseText.length == 4) {
															span_username.setAttribute("class", "");
														} else {
															span_username.setAttribute("class", "text_red");
														}
														span_username.innerText = xmlHttpRequest.responseText;
													}
												};
												//4.发送请求

												xmlHttpRequest.send();
											}
										</script>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1"><span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">密码:</td>
										<td align="left" class="text_cray1"><input name="password" type="text"
												class="text_cray" id="textfield3" /></td>
										<td height="35" align="left" class="text_cray">不少于6位字符</td>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1"><span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">确认密码:</td>
										<td align="left" class="text_cray1"><input name="confirm_password" type="text"
												class="text_cray" id="textfield4" /></td>
										<td height="35" align="left" class="text_cray">请再次输入密码</td>
									</tr>
								</table>
								<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
									<tr>
										<td height="35" colspan="5" align="left" class="text_red1"><span
												class="text_title">详细信息</span></td>
									</tr>

									<tr>
										<td width="19" align="center" class="text_red1">
											<span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">真实姓名:</td>
										<td height="35" colspan="3" align="left">
											<input name="real_name" type="text" class="text_cray" id="textfield2" />
										</td>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1"><span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">性
											别:</td>
										<td height="35" colspan="3" align="left" class="text_cray1">
											<span class="mr25">
												<input type="radio" name="sex" value="1" checked="checked" />
											</span>
											<span class="text_cray">
												<label>男</label>
												<input type="radio" name="sex" value="2" />
												<label>女</label>
											</span>
											<label></label> <span><label></label> </span>
										</td>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1"><span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">省份:</td>
										<td width="104" height="35" align="left">
											<label>
												<select name="province" class="text_cray" id="province">
													<option selected="selected">--请选择省份--</option>
													<c:forEach items="${provinces}" var="p">
														<option value="${p.provinceId}">${p.provinceName}</option>
													</c:forEach>
												</select>
											</label>
										</td>
										<td width="43" height="35" align="left" class="text_cray">城市:</td>
										<td width="436" height="35" align="left" class="text_cray">
											<label>
												<select name="city" class="text_cray" id="city">
													<option value="城市" selected="selected">市县</option>
												</select>
											</label>
										</td>
										<script>
											//实例化ajax引擎对象,定义全局变量
											let xhr;
											document.querySelector("#province").onchange = () => {
												//1.获取省份id
												let pid = document.querySelector("#province").value;
												//2.实例化ajax引擎对象,定义全局变量
												xhr = null;
												if (window.XMLHttpRequest) {// code for all new browsers
													xhr = new XMLHttpRequest();
												} else if (window.ActiveXObject) {// code for IE5 and IE6
													xhr = new ActiveXObject("Microsoft.XMLHTTP");
												} else {
													//alert("Your browser does not support XMLHTTP.");
												}
												//3.调用open方法创建连接
												xhr.open("get", "GetCityServlet?pid=" + pid, true);
												//4.指定回调函数
												xhr.onreadystatechange = () => {//获取服务端响应的信息,把数据取出来放入城市下拉框
													if (xhr.readyState == 4) {
														if (xhr.status == 200) {
															//获取响应的xml文档 (此处生成的是一个xml文件)
															let doc = xhr.responseXML;
															let city_all = doc.getElementsByTagName("city");//这是一个存放所有city的数组

															let city_object = document.querySelector("#city");//拿到城市下拉框
															city_object.options.length = 0;//将城市下拉框清零
															//alert("ok");
															for (let i = 0; i < city_all.length; i++) {
																let city = city_all[i];//拿到数组中的city对象
																let id = city.childNodes[0].firstChild.nodeValue;
																let name = city.childNodes[1].firstChild.nodeValue;
																//给城市下拉框添加选项,其实就是拿到选项然后给选项赋值
																city_object.options[city_object.options.length] = new Option(name, id);
															}
														}
													}
												};
												//5.发送请求
												xhr.send();

											}
										</script>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1">
											<span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">证件类型:</td>
										<td height="35" colspan="3" align="left">
											<select class="text_cray" name="cert_type" id="cardType">
												<option value="1"><span>二代身份证</span>
												</option>
												<option value="2"><span>港澳通行证</span>
												</option>
												<option value="3"><span>台湾通行证</span>
												</option>
												<option value="4"><span>护照</span>
												</option>
											</select>
										</td>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1">
											<span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">证件号码:</td>
										<td height="35" colspan="3" align="left">
											<input name="cert" type="text" class="text_cray" id="textfield6" />
										</td>
									</tr>
									<tr>
										<td width="19" align="center" class="text_red1">
											<span class="text_red">*</span>
										</td>
										<td width="98" height="40" align="left" class="text_cray1">出生日期:</td>
										<td height="35" colspan="3" align="left">
											<input name="birthday" type="date" class="text_cray" id="textfield7" />
										</td>
									</tr>

									<tr>
										<td width="19" align="center">&nbsp;</td>
										<td width="98" height="40" align="left" class="text_cray1">旅客类型:</td>
										<td height="35" colspan="3" align="left">
											<select class="text_cray" id="passengerType" name="user_type">
												<option value="1">成人</option>
												<option value="2">儿童</option>
												<option value="3">学生</option>
												<option value="4">残疾军人、伤残人民警察</option>
											</select>
										</td>
									</tr>
									<tr>
										<td height="10" colspan="5" align="center"></td>
									</tr>
									<tr>
										<td width="19" align="center">&nbsp;</td>
										<td width="98" height="30" align="left" class="text_cray1">备注:</td>
										<td colspan="3" align="left" height="80">
											<textarea name="content" rows="8" class="text_cray" style="width: 100%"></textarea>
										</td>
									</tr>
									<tr>
										<td align="center">&nbsp;</td>
										<td height="30" align="left" class="text_cray1"></td>
										<td height="50" colspan="3" align="left" valign="middle" class="text_cray1">
											<input type="checkbox" class="check" id="checkAgree" name="agree"/>
											<!--此处若不给value值则被选择的状态下给后端传值则为on(其实我也不知道这玩意从哪里冒出来的)非选择状态传null-->
											我已阅读并同意遵守
											 <!-- <a href="/otn/regist/rule;jsessionid=FA97B306AACF75E37DD4D10CFD59994A" class="ft14" target="_blank" shape="rect"> -->
											 <a href="" class="ft14"  shape="rect">
												《中国铁路客户服务中心网站服务条款》
											 </a>
									    </td>
									</tr>
								</table> 
								<br>
								<table width="835" border="0" align="center" cellpadding="0" cellspacing="0">
									<tr>
										<td width="234">&nbsp;</td>
										<td width="147" height="30" align="center"><input name="button3" type="submit"
												class="buttj" id="button3" value=""></td>
										<td width="141" align="center">&nbsp;</td>
										<td width="147" align="center"><input name="button4" type="submit" class="butcz"
												id="button4" value=""></td>
										<td width="166" align="center">&nbsp;</td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
				</td>
			</tr>
		</table>
		<br>

		<table width="100%" border="0" cellspacing="0">
			<tr>
				<td height="2" background="images/bottom_point.gif"></td>
			</tr>
			<tr>
				<td height="25" align="center" background="images/bottom_ny_bg.gif" class="text_cray">copyright@12306
					购票网</td>
			</tr>
		</table>
	</form>
	<!-- <script type="text/JavaScript" src="js/common.js"></script> -->
</body>

</html>

UserServlet.java

package net.ptcs.my12306.controller;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.ptcs.my12306.entity.CertType;
import net.ptcs.my12306.entity.City;
import net.ptcs.my12306.entity.UserType;
import net.ptcs.my12306.entity.Users;
import net.ptcs.my12306.service.UserService;
import net.ptcs.my12306.util.Md5Utils;

/**
 * Servlet implementation class UserServlet
 */
@WebServlet(description = "", urlPatterns = { "/UserServlet" })
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		//1.获取数据
		String username=request.getParameter("username");//用户名
		String password=request.getParameter("password");//密码
		String confirm_password=request.getParameter("confirm_password");//确认密码
		String real_name = request.getParameter("real_name");//真实姓名
		String sex=request.getParameter("sex");//性别
		String province = request.getParameter("province");//省份
		String city = request.getParameter("city");//城市
		String cert_type = request.getParameter("cert_type");//证件类型
		String cert = request.getParameter("cert");//证件号码
		String birthday_date=request.getParameter("birthday");//出生日期
		String user_type = request.getParameter("user_type");//旅客类型
		String content = request.getParameter("content");//备注
		String agree = request.getParameter("agree");//是否同意on/null 被选中/非选

		//2.数据的非空校验和合法性校验
		StringBuffer sb = validateRegisterForm(username, password, confirm_password,agree);
		
		if(sb.length() > 0) {
			//如果校验不通过,那么返回注册页面,让用户再注册一次
			request.setAttribute("message", "必填信息为空,请重新注册");
			request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
		}else {
			//3.调用底层service的注册方法添加用户到数据库
			Date birthday=null;
			try {
				birthday=new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("birthday"));
			} catch (Exception e) {
				e.printStackTrace();
			}
			UserService userService=UserService.getInstance();

//			Integer id, String username, String password, String rule,
//			String realname, Character sex, City city, CertType certtype,
//			String cert, Date birthday, UserType usertype, String content,
//			Character status, String loginIp, String imagePath   String.charAt(Integer.parseInt(sex))  cert_type user_type 1
			
//			Users user = new Users(null,username,password,"2",real_name,null,
//					new City().setCityId(city),null,cert,birthday,null,content,null,request.getRemoteAddr(),null);//此处应该将所有的数据插入
			
			Users user = new Users();
			user.setUsername(username);//用户名
			user.setPassword(Md5Utils.md5(password));//密码
			user.setRule("2");//用户类型 2为普通用户
			user.setRealname(real_name);//真实姓名
			user.setSex(sex.charAt(0));//性别 String 转 Character
			
			City c = new City();
			c.setCityId(city);
			user.setCity(c);//获取城市 String 转 引用类型
			
			user.setCerttype(new CertType(Integer.parseInt(cert_type), null));//证件类型 String 转 引用类型
			
			user.setCert(cert);//证件号码
			
			try {
				user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday_date));
			} catch (ParseException e) {
				e.printStackTrace();
			}//出身日期 String 转 date
			
			user.setUsertype(new UserType(Integer.parseInt(user_type), null));//旅客类型 String 转 引用类型
			
			user.setContent(content);//备注
			user.setLoginIp(request.getRemoteAddr());//设置IP
			
			//服务端校验通过之后,注册方法调用之前,应该先判断用户名是否已经存在
			/*
			 * 则需要定义判断用户名是否已经存在的方法,如果存在则返回注册页面,提示用户名已经存在,
			 * 								 如果不存在则继续注册
			 */

			if(userService.isExistsUserName(username))
			{
				//用户名已经存在,回到注册页面
				request.setAttribute("message", "用户名已被占用");
//				request.getRequestDispatcher("/user_register.jsp").forward(request, response);
				request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
			}else
			{
				if(userService.register(user))
				{
					//System.out.println("register success");
					//注册成功,重定向去到登录页面
					//request.getRequestDispatcher("/login.jsp").forward(request, response);
					/*
					 
					 //弹窗效果:技术实现,对响应进行设置,响应就是response
					response.setContentType("text/html;charset=utf-8");
					//获取输出流,输出一段script代码
					PrintWriter pw=response.getWriter();
					pw.println("<script>alert('"+"注册成功"+"');location.href='login.jsp';</script>");
				
					 
					 */
					//生产环境不用挨骂的代码:需求,既要有弹窗又要重定向登录页面
					
					response.sendRedirect(request.getContextPath()+"/login.jsp?message=registersuccess");
					
					//response.sendRedirect(request.getContextPath()+"/login.jsp");//request.getContextPath()===/my12306_user_register
				}else
				{
//					System.out.println("register fail");
					//注册失败,回到注册页面
					request.setAttribute("message", "注册失败");
					//request.getRequestDispatcher("/user_register.jsp").forward(request, response);
					request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
				}
			}
		}
	}
	/**
	 * 对表单进行服务端校验的方法 
	 * @param username
	 * @param password
	 * @param confirm_password
	 * @return 
	 */
	private StringBuffer validateRegisterForm(String username, String password,String confirm_password,String agree) {
		StringBuffer validate_message=new StringBuffer();
		if(username==null||"".equals(username))
		{
			validate_message.append("用户名为空");
		}
		if(password==null||"".equals(password)||confirm_password==null||"".equals(confirm_password))
		{
			validate_message.append("密码或者确认密码为空");
		}
		if(!password.equals(confirm_password))
		{
			validate_message.append("两次密码输入不一致");
		}
		if(agree == null) {
			validate_message.append("请阅读《中国铁路客户服务中心网站服务条款》并勾选");
		}
		if(validate_message.length()>0)
		{
			System.out.println(validate_message.toString());
			return validate_message;
		}
		return validate_message;
	}
}

UsersDao.java

package net.ptcs.my12306.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import net.ptcs.my12306.entity.CertType;
import net.ptcs.my12306.entity.City;
import net.ptcs.my12306.entity.Province;
import net.ptcs.my12306.entity.UserType;
import net.ptcs.my12306.entity.Users;
import net.ptcs.my12306.util.DBUtils_pool;

public class UsersDao {

	/**
	 * id NUMBER(11) not null, username VARCHAR2(30) not null, password
	 * VARCHAR2(50) not null, rule VARCHAR2(2) default '2' not null, realname
	 * VARCHAR2(50) not null, sex CHAR(1) default '1' not null, city NUMBER(11)
	 * not null, cert_type NUMBER(11) not null, cert VARCHAR2(50) not null,
	 * birthday DATE not null, user_type NUMBER(11), content VARCHAR2(3000),
	 * status CHAR(1) default '1' not null, login_ip VARCHAR2(50), image_path
	 * VARCHAR2(200)
	 */
//	private static final String ADD_USER = "insert into my12306_tab_user(id,username,password,rule,realname,sex,city,cert_type"
//			+ ",cert,birthday,user_type,content,status,login_ip,image_path)"
//			+ " values (tab_user_seq.nextval,?,?,'2','张三',?,200,1,'440104201910106119',?,1,'备注','1',?,'')";
	private static final String ADD_USER = "insert into my12306_tab_user(id,username,password,rule,realname,sex,city,cert_type"
			+ ",cert,birthday,user_type,content,status,login_ip,image_path)"
			+ " values (tab_user_seq.nextval,?,?,'2',?,?,?,?,?,?,?,?,'1',?,'')";

	private static final String QUERY_USERNAME = "select count(1) count from my12306_tab_user where username=?";

	private static final String QUERY_USER_BY_USERNAME_AND_PASSWORD = "select u.id,u.username,u.password,u.rule,"
			+ "u.realname,u.sex,u.city c_id,u.cert_type"
			+ ",u.cert,u.birthday,u.user_type,u.content,u.status,u.login_ip,u.image_path,"
			+ "c.city,p.province,p.provinceid,ut.content ut_content,ct.content ct_content "
			+ "from my12306_tab_user u,my12306_tab_city c,my12306_tab_province p,my12306_tab_usertype ut,my12306_tab_certtype ct"
			+ " where u.city=c.id and p.provinceid=c.father "
			+ "and ut.id=u.user_type and ct.id=u.cert_type "
			+ "and u.username=? and u.password=?";
	
	public int addUser(Users user) {
		int rows = 0;
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
			
			conn = DBUtils_pool.getConnection();
			stmt = conn.prepareStatement(ADD_USER);
			//此处要取所有的数据 username password rule realname sex 
			//city cert_type cert birthday user_type content statu login_ip
			//" values (tab_user_seq.nextval,?,?,'2',?,?,?,?,?,?,?,?,'1',?,'')";
			stmt.setString(1, user.getUsername());//用户名
			stmt.setString(2, user.getPassword());//密码
			stmt.setString(3, user.getRealname());//真实姓名
			stmt.setString(4, user.getSex().toString());//性别 stmt.setString(3, user.getSex() + "");
			stmt.setInt(5, Integer.parseInt(user.getCity().getCityId()));//城市
			stmt.setString(6, user.getCerttype().getId().toString());//证件类型
			stmt.setString(7, user.getCert());//证件号码
			stmt.setDate(8, new java.sql.Date(user.getBirthday().getTime()));//生日 
			stmt.setInt(9, user.getUsertype().getId());//旅客类型
			stmt.setString(10, user.getContent());//备注
			stmt.setString(11, user.getLoginIp());//拿出IP
			rows=stmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBUtils_pool.release(conn, stmt, null);
		}
		return rows;
	}

	private UsersDao() {

	}

	public static UsersDao userDao;

	public static UsersDao getInstance() {
		if (userDao == null) {
			userDao = new UsersDao();
		}
		return userDao;
	}

	/**
	 * 查询用户名是否存在
	 * @param username
	 * @return
	 */
	public boolean queryUsername(String username) {
		Boolean result=false;
		
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		try {

			conn = DBUtils_pool.getConnection();
			stmt = conn.prepareStatement(QUERY_USERNAME);
			stmt.setString(1,username);
			
			rs=stmt.executeQuery();
			if(rs.next())
			{
				int tmp=rs.getInt("count");
				if(tmp>0)
				{
					result=true;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBUtils_pool.release(conn, stmt, rs);
		}

		return result;
	}

	/**
	 * 根据用户名和密码查询用户信息
	 * @param username
	 * @param password
	 * @return
	 */
	public Users queryUserByUsernameAndPassword(String username, String password) {
		Users user=null;
		
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		try {

			conn = DBUtils_pool.getConnection();
			stmt = conn.prepareStatement(QUERY_USER_BY_USERNAME_AND_PASSWORD);
			stmt.setString(1,username);
			stmt.setString(2,password);
			rs=stmt.executeQuery();
			if(rs.next())
			{
				user=new Users();
				/*
				 * id,username,password,rule,realname,sex,city,cert_type"
			+ ",cert,birthday,user_type,content,status,login_ip,image_path
				 */
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				user.setRule(rs.getString("rule"));
				user.setRealname(rs.getString("realname"));
				//补全另外10个数据
				user.setId(rs.getInt("id"));
				user.setRule(rs.getString("rule"));
				user.setSex(rs.getString("sex").charAt(0));
				user.setCity(new City(rs.getInt("c_id"),null, rs.getString("city"), new Province(null, rs.getString("provinceid"), rs.getString("province"))));
				user.setCerttype(new CertType(rs.getInt("cert_type"), rs.getString("ct_content")));
				user.setCert(rs.getString("cert"));
				user.setBirthday(rs.getDate("birthday"));
				user.setUsertype(new UserType(rs.getInt("user_type"),rs.getString("ut_content")));
				user.setContent(rs.getString("content"));
				user.setStatus(rs.getString("status").charAt(0));
				user.setLoginIp(rs.getString("login_ip"));
				user.setImagePath(rs.getString("image_path"));

			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBUtils_pool.release(conn, stmt, rs);
		}
		return user;
	}
	public int updateUser(Users user) {
		int rows=0;
		Connection conn=null;
		PreparedStatement stmt=null;
		
		try {
			//这些待更新的数据:真实姓名 性 别   城市 证件类型 证件号码 出生日期 旅客类型 备注
			String update_user_sql="update my12306_tab_user set realname=?,sex=?,city=?,cert_type=?,cert=?,"
					+ "birthday=?,user_type=?,content=? where id=?";
			conn=DBUtils_pool.getConnection();
			stmt=conn.prepareStatement(update_user_sql);
			stmt.setString(1, user.getRealname());
			stmt.setString(2, user.getSex() + "");
			stmt.setInt(3, user.getCity().getId());
			stmt.setInt(4,user.getCerttype().getId());
			stmt.setString(5,user.getCert());
			stmt.setDate(6, new java.sql.Date(user.getBirthday().getTime()));
			stmt.setInt(7,user.getUsertype().getId());
			stmt.setString(8,user.getContent());
			stmt.setInt(9, user.getId());
			
			rows=stmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBUtils_pool.release(conn, stmt, null);
		}
		return rows;
	}
	/**
	 * 根据id和旧的密码查询数据库,看能否找到用户,找到则旧密码输入正确
	 * @param id
	 * @param password_old
	 * @return
	 */
	public boolean find(Integer id, String password_old) {
		Boolean result=false;
		
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		try {

			conn = DBUtils_pool.getConnection();
			stmt = conn.prepareStatement("select * from tab_user where id=? and password=?");
			stmt.setInt(1,id);
			stmt.setString(2, password_old);
			rs=stmt.executeQuery();
			if(rs.next())
			{
				result=true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBUtils_pool.release(conn, stmt, rs);
		}

		return result;
	}
	
	public void updatePassword(Integer id, String password_new) {
		Connection conn=null;
		PreparedStatement stmt=null;
		
		try {
			//这些待更新的数据:真实姓名 性 别   城市 证件类型 证件号码 出生日期 旅客类型 备注
			String update_user_sql="update tab_user set password=? where id=?";
			conn=DBUtils_pool.getConnection();
			stmt=conn.prepareStatement(update_user_sql);
			stmt.setString(1,password_new);
			stmt.setInt(2,id);
			
			stmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBUtils_pool.release(conn, stmt, null);
		}
	}

	/**
	 * 根据给定条件查询用户信息:组合查询
	 * @param username
	 * @param certtype
	 * @param cert
	 * @param usertype
	 * @param sex
	 * @return
	 */
	public List<Users> queryUserByCondition(String username, int certtype,
			String cert, int usertype, char sex) {
		List<Users> users=new ArrayList<>();
		
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		try {

			conn = DBUtils_pool.getConnection();
			
			StringBuffer query_user=new StringBuffer("select u.id,u.username,u.sex,u.cert,"
					+ "ct.id ct_id,ct.content ct_content,"
					+ "ut.id ut_id,ut.content ut_content "
					+ "from my12306_tab_user u,my12306_tab_usertype ut,my12306_tab_certtype ct "
					+ "where ut.id=u.user_type and ct.id=u.cert_type and sex='"+sex+
					"' and cert_type="+certtype+" and user_type="+usertype);
			if(username!=null&& !"".equals(username.trim()))
			{
				query_user.append(" and username like '%"+username.trim()+"%'");
			}
			if(cert!=null && !"".equals(cert.trim()))
			{
				query_user.append(" and cert='"+cert+"'");
			}
			
			stmt = conn.prepareStatement(query_user.toString());
			
			
			rs=stmt.executeQuery();
			Users user=null;
			while(rs.next())
			{
				user=new Users();
				
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setSex(rs.getString("sex").charAt(0));
				user.setCerttype(new CertType(rs.getInt("ct_id"), rs.getString("ct_content")));
				user.setCert(rs.getString("cert"));
				user.setUsertype(new UserType(rs.getInt("ut_id"),rs.getString("ut_content")));
				
				users.add(user);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBUtils_pool.release(conn, stmt, rs);
		}

		return users;
	}

	public void insertImage(Integer id, String fileName) {
		Connection conn=null;
		PreparedStatement stmt=null;
		
		try {
			//这些待更新的数据:真实姓名 性 别   城市 证件类型 证件号码 出生日期 旅客类型 备注
			String update_user_sql="update my12306_tab_user set image_path=? where id=?";
			conn=DBUtils_pool.getConnection();
			stmt=conn.prepareStatement(update_user_sql);
			stmt.setString(1, fileName);
			stmt.setInt(2, id);
			
			
			stmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBUtils_pool.release(conn, stmt, null);
		}
	}
	
}

以上就是我对于Java用户注册功能的总结


分割线


相关信息

以上就是我关于 Java实现用户注册功能 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4