DB - HashMap을 데이터베이스로 전환하여 회원정보 관리 프로그램 구축하는 퀴즈(2022-08-10)
2022. 8. 10. 21:43ㆍ3층 1구역 - 개발의 장/Oracle DataBase
인터페이스 - IMemberDAO.java
package jdbc_disassemble.DAO;
import java.util.Collection;
import jdbc_disassemble.DTO.MemberDTO;
public interface IMemberDAO {
public Collection<MemberDTO> selectAll() ;
public MemberDTO selectEmail(String email);
public void insert(MemberDTO member);
public void update(MemberDTO member);
public void delete(String email);
}
MemberDAO.java
package jdbc_disassemble.DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Collection;
import java.util.HashMap;
import jdbc_disassemble.DTO.MemberDTO;
public class MemberDAO implements IMemberDAO{
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
public MemberDAO() {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String username = "<권한받은 계정>";
String password = "<설치 시 설정한 비밀번호>";
try {
Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Collection<MemberDTO> selectAll() {
String sql = "SELECT * FROM <테이블 명>";
HashMap<String, MemberDTO> members = new HashMap<>();
try {
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
MemberDTO member = new MemberDTO();
member.setRegisterDate(rs.getString("registerDate"));
member.setEmail(rs.getString("email"));
member.setName(rs.getString("name"));
member.setPassword(rs.getString("password"));
members.put(sql, member);
}
} catch (Exception e) {
e.printStackTrace();
}
return members.values();
}
@Override
public MemberDTO selectEmail(String email) {
String sql = "SELECT * FROM <테이블 명> WHERE email=?";
try {
ps = con.prepareStatement(sql);
ps.setString(1, email);
rs = ps.executeQuery();
if(rs.next()) {
MemberDTO member = new MemberDTO();
member.setRegisterDate(rs.getString("registerDate"));
member.setEmail(rs.getString("email"));
member.setName(rs.getString("name"));
member.setPassword(rs.getString("password"));
return member;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public void insert(MemberDTO member) {
String sql = "INSERT INTO <테이블 명> VALUES(?, ?, ?, ?)";
try {
ps = con.prepareStatement(sql);
ps.setString(1, member.getRegisterDate());
ps.setString(2, member.getEmail());
ps.setString(3, member.getName());
ps.setString(4, member.getPassword());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void update(MemberDTO member) {
String sql = "UPDATE <테이블 명> SET password=? WHERE email=?";
try {
ps = con.prepareStatement(sql);
ps.setString(1, member.getPassword());
ps.setString(2, member.getEmail());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void delete(String email) {
String sql = "DELETE FROM <테이블 명> WHERE email=?";
try {
ps = con.prepareStatement(sql);
ps.setString(1, email);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
public void disconnection() {
try {
if(rs != null) rs.close();
if(ps != null) ps.close();
if(con != null) con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
인터페이스 - IMemberDTO.java
package jdbc_disassemble.DTO;
public interface IMemberDTO {
public void setEmail(String email);
public void setPassword(String password);
public void setName(String name);
public void setRegisterDate(String registerDate);
public String getEmail();
public String getPassword();
public String getName();
public String getRegisterDate();
}
MemberDTO.java
package jdbc_disassemble.DTO;
/*QL> CREATE TABLE dto(
2 registerDate varchar2(50),
3 email varchar2(20),
4 name varchar2(20),
5 password varchar2(20)
6 );
Table created.*/
public class MemberDTO implements IMemberDTO{
private String email, password, name, registerDate;
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public void setPassword(String password) {
this.password = password;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setRegisterDate(String registerDate) {
this.registerDate = registerDate;
}
@Override
public String getEmail() {
return email;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getName() {
return name;
}
@Override
public String getRegisterDate() {
return registerDate;
}
}
IRegisterRequest.java
package jdbc_disassemble.DTO;
public interface IRegisterRequest {
public String getEmail();
public String getName() ;
public String getPassword();
public String getConfirmPassword();
public void setPassword(String password);
public void setEmail(String email);
public void setName(String name);
public void setConfirmPassword(String confirmPassword);
}
RegisterRequest.java
package jdbc_disassemble.DTO;
public class RegisterRequest implements IRegisterRequest{
private String email, name, password, confirmPassword;
@Override
public String getEmail() {
return email;
}
@Override
public String getName() {
return name;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getConfirmPassword() {
return confirmPassword;
}
@Override
public void setPassword(String password) {
this.password = password;
}
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
}
ChangePasswordService.java
package jdbc_disassemble.Service;
import jdbc_disassemble.DAO.MemberDAO;
import jdbc_disassemble.DTO.MemberDTO;
public class ChangePasswordService {
private MemberDAO memberDao;
public ChangePasswordService(MemberDAO memberDao) {
this.memberDao = memberDao;
}
public void changePassword(String email, String oldPw, String newPw) {
// 이메일 등록여부 확인.
MemberDTO member = memberDao.selectEmail(email);
if(member == null) {
System.out.println("등록되지 않은 이메일 입니다. 사유 : " + email);
}else {
// 패스워드 확인 및 MemberDAO.update() 호출
if(member.getPassword().equals(oldPw) == false) {
System.out.println("암호가 일치하지 않습니다.");
}else {
member.setPassword(newPw);
memberDao.update(member);
System.out.println("암호가 수정되었습니다.");
}
}
}
}
MemberAllService.java
package jdbc_disassemble.Service;
import java.util.Collection;
import jdbc_disassemble.DAO.MemberDAO;
import jdbc_disassemble.DTO.MemberDTO;
public class MemberAllService {
private MemberDAO memberDao;
public MemberAllService(MemberDAO memberDao){
this.memberDao = memberDao;
}
public void selectAll() {
// MemberDAO 객체 내부 selectAll() 호출 후 회원 모든 정보 출력
Collection<MemberDTO> members = memberDao.selectAll();
if(members.isEmpty() == false) {
for(MemberDTO member : members) {
System.out.println("가입일 : " + member.getRegisterDate());
System.out.println("이메일 : " + member.getEmail());
System.out.println("이름 : " + member.getName());
System.out.println("암호 : " + member.getPassword());
}
}else {
System.out.println("등록 후 이용해주세요.");
}
}
}
MemberDeleteService.java
package jdbc_disassemble.Service;
import jdbc_disassemble.DAO.MemberDAO;
import jdbc_disassemble.DTO.MemberDTO;
public class MemberDeleteService {
private MemberDAO memberDao;
public MemberDeleteService(MemberDAO memberDao) {
this.memberDao = memberDao;
}
public void checkPassword(String email, String password, String confirmPassword) {
// 패스워드 확인
if (password != null && password.equals(confirmPassword) == false) {
System.out.println("암호가 일치하지 않습니다.");
return;
}
// MemberDAO 객체 내 selectEmail() 메소드를 호출
MemberDTO member = memberDao.selectEmail(email);
if (member == null) {
System.out.println("등록되지 않은 이메일 입니다. " + email);
} else {
// 저장된 회원 정보와 입력된 회원 정보 검증
if (password.equals(member.getPassword()) == false) {
System.out.println("저장된 암호와 일치하지 않습니다.");
} else {
// MemberDAO 객체 내 delete() 호출
memberDao.delete(email);
System.out.println("계정이 삭제되었습니다.");
}
}
}
}
MemberRegisterService.java
package jdbc_disassemble.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import jdbc_disassemble.DAO.MemberDAO;
import jdbc_disassemble.DTO.MemberDTO;
import jdbc_disassemble.DTO.RegisterRequest;
public class MemberRegisterService {
private MemberDAO memberDao = new MemberDAO();
public MemberRegisterService(MemberDAO memberDao) {
this.memberDao = memberDao;
}
public void regist(RegisterRequest req) {
// password == confirmPassword
if(req.getPassword().equals(req.getConfirmPassword()) == false) {
System.out.println("암호가 일치하지 않습니다.");
return;
}
// email로 계정 등록 여부 확인
MemberDTO check = memberDao.selectEmail(req.getEmail());
if(check != null) {
System.out.println(req.getEmail() + "는/은 등록된 이메일입니다.");
return;
}
// memberDao.insert() 계정 등록
MemberDTO member = new MemberDTO();
member.setEmail(req.getEmail());
member.setName(req.getName());
member.setPassword(req.getPassword());
Date date = new Date();
SimpleDateFormat day = new SimpleDateFormat("yyyy년 MM월 dd일");
String fday = day.format(date);
member.setRegisterDate(fday);
memberDao.insert(member);
}
}
Main.java
package jdbc_disassemble.main;
import java.util.Scanner;
import jdbc_disassemble.DAO.MemberDAO;
import jdbc_disassemble.DTO.RegisterRequest;
import jdbc_disassemble.Service.ChangePasswordService;
import jdbc_disassemble.Service.MemberAllService;
import jdbc_disassemble.Service.MemberDeleteService;
import jdbc_disassemble.Service.MemberRegisterService;
public class Main {
private static MemberDAO memberDao = new MemberDAO();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("명령어를 입력하세요");
System.out.print("> ");
String command = sc.nextLine();
if(command.equalsIgnoreCase("exit")){
memberDao.disconnection();
System.out.println("종료합니다.");
break;
}
if(command.startsWith("new")){
processNewCommand(command.split(" "));
continue;
} else if(command.startsWith("change")){
processChangeCommand(command.split(" "));
continue;
} else if(command.startsWith("all")) {
processAllCommand();
continue;
} else if(command.startsWith("delete")) {
processDeleteCommand(command.split(" "));
continue;
}
printHelp();
}
}
private static void processNewCommand(String[] arg) {
//"정보 등록 : new [이메일] [이름] [암호] [암호확인]"
if(arg.length != 5){
printHelp();
return;
}
// MemberRegisterService 객체 생성
MemberRegisterService regSvc = new MemberRegisterService(memberDao);
// RegisterRequest 객체 생성
RegisterRequest req = new RegisterRequest();
// 데이터는 RegisterRequest 객체에 입력
req.setEmail(arg[1]);
req.setName(arg[2]);
req.setPassword(arg[3]);
req.setConfirmPassword(arg[4]);
// regSvc.regist() 호출
regSvc.regist(req);
}
private static void processAllCommand() {
// MemberAllService 객체 생성
MemberAllService allSvc = new MemberAllService(memberDao);
// allSvc.selectAll() 호출
allSvc.selectAll();
}
private static void processChangeCommand(String[] arg) {
if(arg.length != 4) {
printHelp();
return;
}
// ChangePasswordService 객체 생성
ChangePasswordService change = new ChangePasswordService(memberDao);
// change.changePassword() 호출
change.changePassword(arg[1], arg[2], arg[3]);
}
private static void processDeleteCommand(String[] arg) {
if(arg.length != 4) {
printHelp();
return ;
}
// MemberDeleteService 객체 생성
MemberDeleteService delete = new MemberDeleteService(memberDao);
// delete.checkPassword() 호출
delete.checkPassword(arg[1], arg[2], arg[3]);
}
private static void printHelp(){
System.out.println();
System.out.println("명령어 사용법을 확인하세요.");
System.out.println("usage : ");
System.out.println("모든 정보 출력 : all");
System.out.println("정보 등록 : new [이메일] [이름] [암호] [암호확인]");
System.out.println("비밀번호 수정 : change [이메일] [현재비밀번호] [변경할비밀번호]");
System.out.println("정보 삭제 : delete [이메일] [암호] [암호확인]");
System.out.println("종료 : exit");
System.out.println();
}
}
'3층 1구역 - 개발의 장 > Oracle DataBase' 카테고리의 다른 글
오라클 디벨롭퍼 설치해보기 (0) | 2022.10.05 |
---|---|
DB - JAVA로 게시판 만드는 퀴즈(2022-08-10) (0) | 2022.08.10 |
DB - JAVA로 게시판 만드는 퀴즈(7) - Exit(종료) '편'(2022-08-10) (0) | 2022.08.10 |
DB - JAVA로 게시판 만드는 퀴즈(6) - Update(정보수정) '편'(2022-08-10) (0) | 2022.08.10 |
DB - JAVA로 게시판 만드는 퀴즈(5) - Delete(삭제) '편'(2022-08-10) (0) | 2022.08.10 |