App

더보기
package db.member;

public class App {
	public static void main(String[] args) {
		MemberUI ui=new MemberUI();
		ui.menu();
	}

}

MemberDAO

더보기
package db.member;

import java.sql.SQLException;
import java.util.List;

public interface MemberDAO {
	public int insertMember(MemberDTO dto) throws SQLException;
	public int updateMember(MemberDTO dto) throws SQLException;
	public int deleteMember(String id) throws SQLException;
	
	public MemberDTO readMember(String id);
	public List<MemberDTO> listMember();
	public List<MemberDTO> listMember(String name);	
}

MemberDAOImpl

더보기
package db.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLDataException;
import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.List;

import db_util.DBConn;


public class MemberDAOImpl implements MemberDAO {
	private Connection conn = DBConn.getConnection();

	@Override
	public int insertMember(MemberDTO dto) throws SQLException {
		int result = 0;

		/*
		  - 하나의 테이블에 추가
		     INSERT INTO 테이블명(컬럼명, 컬럼명) VALUES (값, 값)
		  - 두개의 테이블에 추가
		     INSERT ALL
		       INTO 테이블명(컬럼명, 컬럼명) VALUES (값, 값)
		       INTO 테이블명(컬럼명, 컬럼명) VALUES (값, 값)
		       SELECT * FROM dual 
		*/
		
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;
		String sql;
		try {
			sql = "INSERT INTO member1(id, pwd, name) VALUES(?, ?, ?)";
			pstmt1 = conn.prepareStatement(sql);
			
			pstmt1.setString(1, dto.getId());
			pstmt1.setString(2, dto.getPwd());
			pstmt1.setString(3, dto.getName());
			
			result = pstmt1.executeUpdate();
			
			sql = "INSERT INTO member2(id, birth, email, tel) VALUES(?,?,?,?)";
			pstmt2 = conn.prepareStatement(sql);
			
			pstmt2.setString(1, dto.getId());
			pstmt2.setString(2, dto.getBirth());
			pstmt2.setString(3, dto.getEmail());
			pstmt2.setString(4, dto.getTel());
			
			result += pstmt2.executeUpdate();
			
		} catch (SQLIntegrityConstraintViolationException e) {
			if(e.getErrorCode()==1) {
				System.out.println("아이디 중복 입니다.");
			} else if(e.getErrorCode()==1400) { // NOT NULL 위반
				System.out.println("필수 사항을 입력 하지 않았습니다.");
			} else {
				System.out.println(e.toString());
			}
			throw e;
		} catch (SQLDataException e) {
			if(e.getErrorCode()==1861 || e.getErrorCode()==1840) { 
				System.out.println("날짜 형식이 잘못 되었습니다.");
			} else {
				System.out.println(e.toString());
			}
			throw e;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		} finally {
			try {
				if( pstmt1 != null || pstmt2 != null) {
					pstmt1.close();
					pstmt2.close();
				}
			} catch (Exception e2) {
			}
		}
				

		// member1 테이블과 member2 테이블에 데이터 추가
		// 방법1) member1 추가 후 member2 추가
		// 방법2) member1과 member2를 한번에 추가
		
		
		return result;
	}

	@Override
	public int updateMember(MemberDTO dto) throws SQLException {
		int result = 0;
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;
		String sql;
		
		// UPDATE 테이블명 SET 컬럼=값, 컬럼=값 WHERE 조건
		try {
			sql = " UPDATE member1 SET pwd=?, name=? WHERE id=? ";
			pstmt1 = conn.prepareStatement(sql);
			
			pstmt1.setString(1, dto.getPwd());
			pstmt1.setString(2, dto.getName());
			pstmt1.setString(3, dto.getId());
			
			result = pstmt1.executeUpdate();
			
			sql = " UPDATE member2 SET birth=?, email=?, tel=? WHERE id=? ";
			pstmt2 = conn.prepareStatement(sql);
			
			pstmt2.setString(1, dto.getBirth());
			pstmt2.setString(2, dto.getEmail());
			pstmt2.setString(3, dto.getTel());
			pstmt2.setString(4, dto.getId());
			
			result += pstmt2.executeUpdate();
			
		} catch (SQLIntegrityConstraintViolationException e) {
			if(e.getErrorCode()==1400) {
				System.out.println("필수 입력 사항을 입력하지 않았습니다.");
			} else {
				System.out.println(e.toString());
			}
			throw e;
		} catch (SQLDataException e) {
			if(e.getErrorCode()==1840||e.getErrorCode()==1861) {
				System.out.println("날짜 형식이 올바르지 않습니다.");
			} else {
				System.out.println(e.toString());
			}
			throw e;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if( pstmt1 != null || pstmt2 != null) {
					pstmt1.close();
					pstmt2.close();
				}
			} catch (Exception e2) {
			}
		}
		// id 조건에 맞는 member1 테이블과 member2 테이블에 데이터 수정
		// member1 수정 후 member2 수정
		
		return result;
	}

	@Override
	public int deleteMember(String id) throws SQLException {
		int result = 0;
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;
		String sql;
		// DELETE FROM 테이블명 WHERE 조건
		try {
			sql = "DELETE FROM member2 WHERE id = ?";
			pstmt1 = conn.prepareStatement(sql);
			pstmt1.setString(1, id);
			
			result = pstmt1.executeUpdate();
			
			sql = "DELETE FROM member1 WHERE id = ?";
			pstmt2 = conn.prepareStatement(sql);
			pstmt2.setString(1, id);
			
			result += pstmt2.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if( pstmt1 != null || pstmt2 != null) {
					pstmt1.close();
					pstmt2.close();
				}
			} catch (Exception e2) {
			}
		}
		// id 조건에 맞는 member1 테이블과 member2 테이블 데이터 삭제
		// member2 삭제후 member1 삭제

		return result;
	}

	@Override
	public MemberDTO readMember(String id) {
		MemberDTO dto = new MemberDTO();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql;
		/*
		  - 하나의 테이블
		    SELECT 컬럼, 컬럼 FROM 테이블 WHERE 조건
		  - EQUI 조인
		    SELECT 테이블1.컬럼, 테이블1.컬럼, 테이블2.컬럼
            FROM 테이블1
            JOIN 테이블2 ON 테이블1.컬럼 = 테이블2.컬럼
            WHERE 조건
		  - LEFT OUTER JOIN 조인
		    SELECT 테이블1.컬럼, 테이블1.컬럼, 테이블2.컬럼
            FROM 테이블1
            LEFT OUTER JOIN 테이블2 ON 테이블1.컬럼 = 테이블2.컬럼
            WHERE 조건
		 */
		
		try {
			sql = "SELECT m1.id id, pwd, name, NVL(birth, '1900-01-01') 생년월일, NVL(email, '등록안함') 이메일, NVL(tel, '등록안함') 전화번호 "
					+" FROM member1 m1 "
					+" LEFT OUTER JOIN member2 m2 ON m1.id = m2.id "
					+" WHERE m1.id LIKE ?";
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, id);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				dto.setId(rs.getString("id"));
				dto.setPwd(rs.getString("pwd"));
				dto.setName(rs.getString("name"));
				dto.setBirth(rs.getDate("생년월일").toString());
				dto.setEmail(rs.getString("이메일"));
				dto.setTel(rs.getString("전화번호"));
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		// id 조건에 맞는 member1 테이블과 member2 테이블 데이터를 OUTER JOIN 해서 아이디 검색

		return dto;
	}

	@Override
	public List<MemberDTO> listMember() {
		List<MemberDTO> list = new ArrayList<>();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql;
		
		// member1 테이블과 member2 테이블의 전체 데이터를 OUTER JOIN 해서 전체 리스트

		try {
			sql = "SELECT m1.id id, pwd, name, NVL(birth, '1900-01-01') 생년월일, NVL(email, '등록안함') 이메일, NVL(tel, '등록안함') 전화번호 "
					+" FROM member1 m1 "
					+" LEFT OUTER JOIN member2 m2 ON m1.id = m2.id ";
			
			pstmt = conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				MemberDTO dto = new MemberDTO();
				
				dto.setId(rs.getString("id"));
				dto.setPwd(rs.getString("pwd"));
				dto.setName(rs.getString("name"));
				dto.setBirth(rs.getDate("생년월일").toString());
				dto.setEmail(rs.getString("이메일"));
				dto.setTel(rs.getString("전화번호"));
				
				list.add(dto);
			}

		} catch (NullPointerException e) {
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if( rs != null) {
					rs.close();
				}
			} catch (Exception e2) {
			}
			try {
				if ( pstmt != null ) {
					pstmt.close();
				}
			} catch (Exception e2) {
			}
		}
		
		return list;
	}

	@Override
	public List<MemberDTO> listMember(String name) {
		List<MemberDTO> list = new ArrayList<>();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql;
		
		// member1 테이블과 member2 테이블의 전체 데이터를 OUTER JOIN 해서 이름 검색
		try {
			sql = "SELECT m1.id id, pwd, name, NVL(birth, '1900-01-01') 생년월일, NVL(email, '등록안함') 이메일, NVL(tel, '등록안함') 전화번호"
					+" FROM member1 m1 "
					+" LEFT OUTER JOIN member2 m2 ON m1.id = m2.id "
					+" WHERE INSTR(name, ?) > 0";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				MemberDTO dto = new MemberDTO();
				
				dto.setId(rs.getString("id"));
				dto.setPwd(rs.getString("pwd"));
				dto.setName(rs.getString("name"));
				dto.setBirth(rs.getDate("생년월일").toString());
				dto.setEmail(rs.getString("이메일"));
				dto.setTel(rs.getString("전화번호"));
				
				list.add(dto);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (Exception e2) {
				}
			}
			
			if (pstmt != null) {
				try {
					pstmt.close();
				} catch (Exception e2) {
				}
			}
		}
		
		
		return list;
	}
}

MemberDTO

더보기
package db.member;

public class MemberDTO {
	private String id;
	private String pwd;
	private String name;
	private String birth;
	private String email;
	private String tel;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	
}

MemberUI

더보기
package db.member;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;

import db_util.DBConn;

public class MemberUI {
	private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	private MemberDAO dao = new MemberDAOImpl();

	public void menu() {
		int ch;
		
		System.out.println("회원-예제...");
		
		while(true) {
			try {
				do {
					System.out.print("1.회원가입 2.수정 3.탈퇴 4.아이디검색 5.이름검색 6.리스트 7.종료 => ");
					ch=Integer.parseInt(br.readLine());
				} while(ch < 1 || ch > 7);
				
				if(ch == 7) {
					DBConn.close();
					return;
				}
	
				switch(ch) {
				case 1:insert(); break;
				case 2:update(); break;
				case 3:delete(); break;
				case 4:findById(); break;
				case 5:findByName(); break;
				case 6:listAll(); break;
				}
			}catch (Exception e) {
			}
		}
	}
	
	public void insert() {
		System.out.println("\n회원가입...");
		int result = 0;
		
		try {
			MemberDTO dto = new MemberDTO();
			System.out.println("회원가입을 시작합니다.");
			System.out.print("ID를 입력해주세요 > ");
			dto.setId(br.readLine());
			System.out.print("비밀번호를 입력해주세요 > ");
			dto.setPwd(br.readLine());
			System.out.print("성함을 입력해주세요 > ");
			dto.setName(br.readLine());
			
			System.out.print("생년월일을 입력해주세요(선택) > ");
			dto.setBirth(br.readLine());
			System.out.print("email을 입력해주세요(선택) > ");
			dto.setEmail(br.readLine());
			System.out.print("전화번호를 입력해주세요(선택) > ");
			dto.setTel(br.readLine());
			
			
			result = dao.insertMember(dto);
			if (result > 0) {
				System.out.println("가입이 완료되었습니다. 감사합니다.\n");				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("회원가입에 실패했습니다.\n");
		}

	}

	public void update() {
		System.out.println("\n회원정보수정...");
		String id;
		
		try {
			System.out.print("수정할 ID를 입력하세요.");
			id = br.readLine();
			
			MemberDTO dto = dao.readMember(id);
			if (dto == null) {
				System.out.println("가입되어있는 ID가 아닙니다.");
				return;
			}

			System.out.println("수정할 패스워드를 입력해주세요 > ");
			dto.setPwd(br.readLine());
			System.out.println("수정할 이름을 입력해주세요 > ");
			dto.setName(br.readLine());
			System.out.print("수정할 생년월일을 입력해주세요(선택) > ");
			dto.setBirth(br.readLine());
			System.out.print("수정할 email을 입력해주세요(선택) > ");
			dto.setEmail(br.readLine());
			System.out.print("수정할 전화번호를 입력해주세요(선택) > ");
			dto.setTel(br.readLine());
			
			dao.updateMember(dto);
			
			System.out.println("회원정보 수정이 완료되었습니다.");
			System.out.println();
			
		} catch (Exception e) {
			System.out.println("정보 수정에 실패했습니다.");
			e.printStackTrace();
		}
		System.out.println();
		
	}

	public void delete() {
		System.out.println("\n회원탈퇴...");
		String id;
		
		try {
			System.out.print("탈퇴할 ID를 입력하세요 > ");
			id = br.readLine();
			
			int result = dao.deleteMember(id);
			if (result > 0) {
				System.out.println("회원탈퇴가 완료되었습니다. ");
				System.out.println("그동안 이용해주셔서 감사합니다.");				
				System.out.println();
			} else {
				System.out.println("회원탈퇴가 이루어지지 않았습니다.");
				System.out.println("등록된 아이디인지 확인해주십시오.");
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void findById() {
		System.out.println("\n아이디 검색...");
		String id;
		
		try {
			System.out.print("검색할 ID를 입력하세요 > ");
			id = br.readLine();
			MemberDTO dto = dao.readMember(id);
			System.out.println("id\tpwd\t이름\t생년월일\t\t이메일\t\t전화번호");
			System.out.println("-----------------------------------------------");
			System.out.print(dto.getId()+"\t");
			System.out.print(dto.getPwd()+"\t");
			System.out.print(dto.getName()+"\t");
			System.out.print(dto.getBirth()+"\t");
			System.out.print(dto.getEmail()+"\t\t");
			System.out.println(dto.getTel());
			System.out.println();
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void findByName() {
		System.out.println("\n이름 검색...");
		String name;
		try {
			System.out.print("검색할 이름을 입력하세요 > ");
			name = br.readLine();
			List<MemberDTO> list = dao.listMember(name);
			
			System.out.println("id\tpwd\t이름\t생년월일\t\t이메일\t\t전화번호");
			System.out.println("-----------------------------------------------");
			for( MemberDTO dto : list) {
				System.out.print(dto.getId()+"\t");
				System.out.print(dto.getPwd()+"\t");
				System.out.print(dto.getName()+"\t");
				System.out.print(dto.getBirth()+"\t");
				System.out.print(dto.getEmail()+"\t\t");
				System.out.println(dto.getTel());
			}
			System.out.println();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void listAll() {
		System.out.println("\n전체 리스트...");
		
		List<MemberDTO> list = dao.listMember();
		System.out.println("id\tpwd\t이름\t생년월일\t\t이메일\t\t전화번호");
		System.out.println("-----------------------------------------------");
		for( MemberDTO dto : list) {
			System.out.print(dto.getId()+"\t");
			System.out.print(dto.getPwd()+"\t");
			System.out.print(dto.getName()+"\t");
			System.out.print(dto.getBirth()+"\t");
			System.out.print(dto.getEmail()+"\t\t");
			System.out.println(dto.getTel());
		}
		System.out.println();
	}
}

+ Recent posts