01) UserDAO 클래스는 실제로 데이터베이스에 접근해서 어떠한 데이터를 가져오거나 데이터를 넣는 역할을 하는 데이터 접근 개체이다.

02) UserDAO 클래스 안에 하나의 함수 하나 추가해 회원가입 기능을 구현한다.

 

[소스코드 1]

package user;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserDAO {

	private Connection conn; //데이터베이스에 접근하게 해주는 객체
	private PreparedStatement pstmt; // 객체를 캐시에 담아 재사용한다.
	private ResultSet rs; 
	// ㄴ executeQuery(String sql)을 통해 쿼리를 실행하면 ResultSet타입으로 반환을 해주어 결과값을 저장할 수 있다.

	
  //mysql에 접속을 하게하는 라이브러리 역할을 한다.
	public UserDAO() {
		try {
			String dbURL = "jdbc:mysql://localhost:3306/BBS";
			String dbID = "root";
			String dbPassword = "1004";
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
		} catch (Exception e) { // 트라이 켓치 예외처리하고 오류가 무엇인지 알수있게한다.
			e.printStackTrace();
		}
	}
 
	public int login(String userID, String userPassword) { // 로그인을 시도하는 함수 
		String SQL = "SELECT userPassword FROM USER WHERE userID = ?"; // 유저테이블에서 사용자 비밀번호를 가져온.
		// 사용자의 ID를 받아서 ID가 실제로 존재하는지 존재한다면 비밀번호가 무엇인지 DB에서 가져온다.
		try {
			pstmt = conn.prepareStatement(SQL); //어떤 정해진 sql 문장을 DB에 삽입한다.
			pstmt.setString(1, userID);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				// 결과가 존재한다면
				if(rs.getString(1).equals(userPassword)) {
					return 1; // 로그인 성공 
				}
				else
					return 0; // 비밀번호 불일치 
			}
			// 그렇지 않다면 
			return -1; //아이디가 없음
		} catch (Exception e) {
			e.printStackTrace();
		}
		return -2; // 데이터베이스 오류 
	}
	
	// 회원가입 기능 
	public int join(User user) { 
		String SQL = "INSERT INTO USER VALUES (?, ?, ?, ?, ?)";
		try {
			pstmt = conn.prepareStatement(SQL);
			pstmt.setString(1, user.getUserID());
			pstmt.setString(2, user.getUserPassword());
			pstmt.setString(3, user.getUserName());
			pstmt.setString(4, user.getUserGender());
			pstmt.setString(5, user.getUserEmail());
			return pstmt.executeUpdate();
		} catch(Exception e) {
			e.printStackTrace();
		}
		return -1; // 데이터베이스 오류 
	}
}

 

 

[소스코드 2]

사용자가 사이트에 접속해 회원가입을 시도를 했을 때, 'joinAction.jsp'로 이동하도록 되어있다. 

회원가입을 처리해주는 새로운 jsp 파일을 만든다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<jsp:setProperty name="user" property="userName" />
<jsp:setProperty name="user" property="userGender" />
<jsp:setProperty name="user" property="userEmail" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		if (user.getUserID() == null || user.getUserPassword() == null || user.getUserName() == null
			|| user.getUserGender() == null || user.getUserEmail() == null) {
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('입력하지 않은 사항이 있습니다.')");
			script.println("history.back()");
			script.println("</script");
		} else {
			UserDAO userDAO = new UserDAO();
			int result = userDAO.join(user);
			if (result == -1) {
				PrintWriter script = response.getWriter();
				script.println("<script>");
				script.println("alert('이미 존재하는 아이디입니다.')");
				script.println("history.back()");
				script.println("</script>");
			}
			else {
				PrintWriter script = response.getWriter();
				script.println("<script>");
				script.println("location.href = 'main.jsp'");
				script.println("</script>");
			}
		}
	%>
</body>
</html>

 

[실행화면 1]

회원가입 화면에 정보를 입력한다. 

 

[실행화면 2]

'회원가입' 버튼을 누르면

- 정상적으로 회원가입되어 'http://localhost:8080/BBS/main.jsp'  페이지로 넘어간다.

[실행화면 3]

회원가입이 정상적으로 완료되었는지 데이터베이스에서 정보를 검색한 화면이다 .

 

 

[실행화면 4]

실행화면 1 화면과 동일하게 정보를 입력 후 회원가입 버튼을 누르면 

- '이미 존재하는 아이디입니다.' 라는 메시지가 뜬다. 

     ㄴ PRIMARY KEY가 중복일 경우  alert 로 이미 존재하는 아이디입니다. 

 

출처 : 

https://www.youtube.com/watch?v=v2mmPRLjJGw&list=PLRx0vPvlEmdAZv_okJzox5wj2gG_fNh_6&index=6

 
 

+ Recent posts