JAVA
회원등록.ver2,PreparedStatement(jsp버전)
docc
2021. 7. 25. 00:32
이메일, 전화번호, 비밀번호, 등록버튼 추가
>> db.sql
drop database if exists 회원2db;
create database 회원2db;
use 회원2db;
create table 회원
(
번호 int primary key auto_increment,
성명 varchar(20) not null,
우편번호 char(5),
주소 varchar(50),
상세주소 varchar(50),
전화번호 varchar(20),
이메일 varchar(30),
아이디 varchar(20) not null,
패스워드 varchar(20) not null,
등록일 timestamp default current_timestamp
);
desc 회원;
>> 회원. java
import java.sql.Date;
public class 회원 {
private int 번호;
private String 성명;
private String 우편번호;
private String 주소;
private String 상세주소;
private String 전화번호;
private String 이메일;
private String 아이디;
private String 패스워드;
private Date 등록일;
public int get번호() {
return 번호;
}
public void set번호(int 번호) {
this.번호 = 번호;
}
public String get성명() {
return 성명;
}
public void set성명(String 성명) {
this.성명 = 성명;
}
public String get우편번호() {
return 우편번호;
}
public void set우편번호(String 우편번호) {
this.우편번호 = 우편번호;
}
public String get주소() {
return 주소;
}
public void set주소(String 주소) {
this.주소 = 주소;
}
public String get상세주소() {
return 상세주소;
}
public void set상세주소(String 상세주소) {
this.상세주소 = 상세주소;
}
public String get전화번호() {
return 전화번호;
}
public void set전화번호(String 전화번호) {
this.전화번호 = 전화번호;
}
public String get이메일() {
return 이메일;
}
public void set이메일(String 이메일) {
this.이메일 = 이메일;
}
public String get아이디() {
return 아이디;
}
public void set아이디(String 아이디) {
this.아이디 = 아이디;
}
public String get패스워드() {
return 패스워드;
}
public void set패스워드(String 패스워드) {
this.패스워드 = 패스워드;
}
public Date get등록일() {
return 등록일;
}
public void set등록일(Date 등록일) {
this.등록일 = 등록일;
}
}
>>회원등록준비.jsp (추가)
비밀번호는 재입력과 값이 똑같은지 본 다음 하나만 가져오면 된다.
<body>
<form action="회원등록.jsp" onsubmit="return 회원등록하다()" method="post">
<h1>회원등록</h1>
<!--기초내용 -->
성명 <input type = "text" name = "name" id="name"><br>
우편번호 <input type = "text" name = "post" id="post" readonly="readonly"><input type="button" onclick="조회창을띄우다()" value="조회"><br>
주소 <input type = "text" name = "address" id="address" readonly="readonly"> <br>
상세주소 <input type = "text" name = "detailaddress"> <br>
전화번호 <input type="text" name="tel"/><br>
이메일 <input type="text" name="email1"/>@
<select name="email2">
<option value="google.com">google.com</option>
<option value="naver.com">naver.com</option>
<option value="daum.com">daum.com</option>
</select>
<br>
아이디 <input type="text" name="id" id="id" readonly="readonly"> <input type="button" onclick="아이디중복검사창을띄우다()" value="조회"><br>
패스워드 <input type="password" name="password" id="password1"/><br>
패스워드재입력 <input type="password" id="password2"/><br>
<input type="submit" value="등록" />
</form>
</body>
<script>
/* 필수입력, 비밀번호확인 */
function 회원등록하다(){
// 필수 입력확인
var txt성명 = document.querySelector("#name");
if(txt성명.value == ""){
alert("성명은 필수 입력입니다.");
return false;
}
var txt아이디 = document.querySelector("#id");
if(txt아이디.value == ""){
alert("아이디은 필수 입력입니다.");
return false;
}
var txt패스워드 = document.querySelector("#password1");
if(txt패스워드.value == ""){
alert("패스워드은 필수 입력입니다.");
return false;
}
// 비밀번호 동일 확인
var txt패스워드2 = document.querySelector("#password2");
if(txt패스워드.value != txt패스워드2.value){
alert("패스워드가 동일하지 않습니다.");
return false;
}
return true;
}
</script>
1. form 태그에 onsubmit 이벤트를 넣는다( 정보등록.jsp 에 값을 넘기면서 같이 일어나는 이벤트 )
2. onsubmit 에 적용할 함수를 만든다.
이 함수에서 필수입력과 비밀번호를 확인한다.
필수입력에 미입력이라면 ("") false 를 return하여 form을 못넘기게 하면된다.
비밀번호와 비밀번호재입력을 가져와 비교한 다음 틀리다면 false로
마지막으로 다 완료되면 true하면 된다.
그리고 함수를 적용하는 onsubmit 이벤트에 return 키워드를 적어줘야 return값을 받아온다.
새로운 JDBC 의 명령클래스 PreparedStatement 를 사용해보자 ( 사용법은 Statement와 유사)
>> 회원DAO.java
import java.sql.*;
import control.ConnectionInfo;
public class 회원DAO {
public boolean 아이디가사용가능한가(String id) {
boolean 아이디가사용가능 = false;
try{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection c = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true",ConnectionInfo.DBIP,ConnectionInfo.DBPORT,ConnectionInfo.DBName),ConnectionInfo.UID,ConnectionInfo.PASSWORD);
PreparedStatement st = c.prepareStatement("select count(*) as 갯수 from 회원 where 아이디 = ?");
st.setString(1, id);
ResultSet set = st.executeQuery();
if(set.next()) {
// 아이디가사용가능 = (set.getInt("갯수")==0)? true:false;
if(set.getInt("갯수")==0) {
아이디가사용가능 = true;
}
}
set.close();
c.close();
}catch(Exception e){
e.printStackTrace();
}
return 아이디가사용가능;
}
public void 저장한다(회원 새회원) {
try{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection c = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true",ConnectionInfo.DBIP,ConnectionInfo.DBPORT,ConnectionInfo.DBName),ConnectionInfo.UID,ConnectionInfo.PASSWORD);
PreparedStatement st = c.prepareStatement("insert into 회원(성명,우편번호,주소,상세주소,전화번호,이메일,아이디,패스워드) values(?,?,?,?,?,?,?,?)");
st.setString(1, 새회원.get성명());
st.setString(2, 새회원.get우편번호());
st.setString(3, 새회원.get주소());
st.setString(4, 새회원.get상세주소());
st.setString(5, 새회원.get전화번호());
st.setString(6, 새회원.get이메일());
st.setString(7, 새회원.get아이디());
st.setString(8, 새회원.get패스워드());
st.executeUpdate();
c.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
아이디 중복확인시 count(*) 를 사용해 받아온 id가 있는지 갯수를 세보면 안다.
count(*) 해서 없을 경우 0을 반환한다.
>> 회원등록.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<%@ page import="membermanage.*"%>
<%
request.setCharacterEncoding("UTF-8");
회원 새회원 = new 회원();
새회원.set성명(request.getParameter("name"));
새회원.set우편번호(request.getParameter("post"));
새회원.set주소(request.getParameter("address"));
새회원.set상세주소(request.getParameter("detailaddress"));
새회원.set전화번호(request.getParameter("tel"));
새회원.set이메일(request.getParameter("email1")+"@"+request.getParameter("email2"));
새회원.set아이디(request.getParameter("id"));
새회원.set패스워드(request.getParameter("password"));
// 1. 업무규칙검사
// 2. DB저장
회원DAO dao = new 회원DAO();
dao.저장한다(새회원);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 3. 결과통보 -->
<%= 새회원.get성명() %> 님 회원 등록해주셔서 감사합니다.
</body>
</html>