DB - 회원관리 프로그램 DAO 부분 상세설명(2022-08-09)

2022. 8. 9. 12:463층 1구역 - 개발의 장/Oracle DataBase

해당 전체코드는 요기!

 

 

2022.08.09 - [개발일지/부트캠프(데이터베이스 Part)] - DB - DB연동을 통한 회원관리 프로그램 구축 하는 퀴즈(2022-08-09)

 

DB - DB연동을 통한 회원관리 프로그램 구축 하는 퀴즈(2022-08-09)

인터페이스 - IDAO.java package jdbc_concept5.DAO; import java.util.ArrayList; import jdbc_concept5.DTO.MemberDTO; public interface IDAO { public MemberDTO selectId(String id); public int insertMembe..

sukw9512.tistory.com

 

인터페이스 - IDAO.java

 

package jdbc_concept5.DAO;

import java.util.ArrayList;

import jdbc_concept5.DTO.MemberDTO;

public interface IDAO {
	public MemberDTO selectId(String id);
	public int insertMember(MemberDTO member);
	public ArrayList<MemberDTO> selectAll();
	public int updateMember(MemberDTO member);
	public int deleteMember(String id);
	public int isExists(String id);
}

 

MemberDAO.java - 서버 구축 관련

 

public class MemberDAO implements IDAO {
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;

	public MemberDAO() {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "<권한받은 아이디>";
		String password = "<설치 시 설정한 비밀번호>";

		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    }

 

 

MemberDAO.java - id 중복 체크 관련(선택사항)

null 값으로 지정하여 '관계문 == null;' 이면 이미

'중복이 되었거나'  비어있기 때문에

'등록을 시작함.' 나타내는 것이 가능하다.

public class MemberDAO implements IDAO {

@Override
	public int isExists(String id) {
		String sql = "SELECT count(id) FROM jdbc_concept5 WHERE id=?";
		int count = 0;
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if (rs.next()) {
				count = rs.getInt(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return count;
	}
}

 

MemberDAO.java - selectAll 관련(모든 정보 조회)

 

public class MemberDAO implements IDAO {

@Override
	public ArrayList<MemberDTO> selectAll() {
		//저장되어 있는 모든 값을 가져온다.
		String sql = "SELECT * FROM jdbc_concept5";
		
		//여러 자료를 보관할 수 있는 기능 LIST, MAP같은 
		//컬렉션 프레임워크
		ArrayList<MemberDTO> members = new ArrayList<>();

		//MemberDTO member = new MemberDTO(); << 새로운 공간을 하나만 만든다.
		//여기에 위의 구문이 존재할 경우, 아래 구문의 값들 넣는 주소가
		//같아지게 된다. 그렇기 때문에 잘 넣다가 마지막에 넣는 값들은
		//처음 주소값에 마지막 값이 들어가거나 함.
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				//1. 새로운 공간을 만들고 << while문이 실행될 때마다 공간을 만든다.
				MemberDTO member = new MemberDTO();
				
				//2. 해당 값들을 member에 넣고
				member.setNum(rs.getInt("num"));
				member.setId(rs.getString("id"));
				member.setPw(rs.getString("pw"));
				member.setName(rs.getString("name"));
				member.setEmail(rs.getString("email"));
				
				//3. 주소에 해당 값을 넣는다.
				members.add(member);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return members;
	}
    }

 

 

MemberDAO.java - selectID 관련(id선택 정보 조회)

 

public class MemberDAO implements IDAO {

@Override
	public MemberDTO selectId(String id) {
		//하나의 id정보를 갖고 있는 정보를 받아오려고 한다.
		String sql = "SELECT * FROM jdbc_concept5 WHERE id=?";
		try {
			ps = con.prepareStatement(sql);
			//'?' 안에 넣어줄 값을 setting
			//?가 첫번째니까 1번째 값에 id를 넣을거다.
			ps.setString(1, id);
			
			//resultSet에 결과를 넣어준다(쿼리를 실행)
			rs = ps.executeQuery();
			
			//next가 실행될 때마다 데이터주소를 계속 이동하며
			//true, false판별, true가 나올때까지 반복
			if (rs.next()) {
				
				//1. MemberDTO공간 안에
				MemberDTO member = new MemberDTO();
				
				//2. Setter를 사용하여 MemberDTO에 넣어주게 되고,
				//Getter를 사용하여 칼럼의 값을 가져온다.
				member.setId(rs.getString("id"));
				member.setNum(rs.getInt("num"));
				member.setPw(rs.getString("pw"));
				member.setName(rs.getString("name"));
				member.setEmail(rs.getString("email"));
				//참이면 member값을 반환.
				return member;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//거짓이면 아무것도 없다 라는 뜻에서 null를 반환.
		return null;
	}
    }

 

 

MemberDAO.java - selectMaxNum(선택사항)

public int selectMaxNum() {
		//max(num) << 이 값을 제대로 못 가져왔을 때,
		//nvl(문제가 있을경우 -1반환)이 0을 반환해주게끔 한다. ↓↓↓↓↓↓↓
		String sql = "SELECT nvl (max(num), -1) FROM jdbc_concept5";
		//↑↑↑↑↑↑↑ 총 정리 :0부터 번호를 시작하려면 칼럼이 비어있기 때문에 번호를 얻어오지 못하고
		//-1(nvl)를 반환하여 0을 얻어올 수 있게끔 하고
		//그 이후로 1번부터 순차대로 번호가 올라간다.
		int maxNum = 0;
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			if(rs.next()) {
				maxNum = rs.getInt(1);
			}		
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return ++maxNum;
		//시퀀스 구문을 선택할 것이냐,  
		//위sql 구문을 채택할 것이냐
		//방법의 차이
	}

 

MemberDAO.java - insertMember(회원 정보 등록)

 

public class MemberDAO implements IDAO {

@Override
	public int insertMember(MemberDTO member) {
		
		
		//칼럼의 데이터 값에 들어갈 값이 5개 이므로 
		//?를 5개를 찍어주도록 한다.
		
		//sql이라는 변수를 써서 쿼리구문을 따로 빼두었지만
		String sql = "INSERT INTO jdbc_concept5 VALUES(?, ?, ?, ?, ?)";
		
		
		try {
			//sql변수 대신 직접 넣어도 상관없음.↓
			ps = con.prepareStatement(sql);
			//Setter를 사용하여 member의 값을 가져와서 넣어준다.
			ps.setInt(1, member.getNum());
			ps.setString(2, member.getId());
			ps.setString(3, member.getPw());
			ps.setString(4, member.getName());
			ps.setString(5, member.getEmail());
			//↓↓↓↓↓↓↓ 얘를 사용해서 DB에 저장할 수 있다.(insert, update, delete)
			return ps.executeUpdate();
			//↑↑↑↑↑↑↑insert 구문이 제대로 실행이 되었다면 
			//1를 반환하기 때문에 위 구문이 정상 실행
		} catch (Exception e) {
			e.printStackTrace();
		}
		//그게 아니면 0을 반환.
		return 0;
	}
    }

 

MemberDAO.java - updateMember(회원 정보 수정)

 

public class MemberDAO implements IDAO {

@Override
	public int updateMember(MemberDTO member) {
		String sql = "UPDATE jdbc_concept5 SET pw=?, name=?, email=? WHERE id=?";
		
		try {
			//위 구문을 알아서 치환해 주고
			ps = con.prepareStatement(sql);
			//위 구문의 아이디와 입력값이 동일 하다면
			ps.setString(4, member.getId());
			//아래 값들을 변환시켜줌.
			ps.setString(1, member.getPw());
			ps.setString(2, member.getName());
			ps.setString(3, member.getEmail());
			//update를 반환.
			return ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		//거짓일 경우 0을 반환.
		return 0;
	}
    }

 

 

MemberDAO.java - deleteMember(회원 정보 삭제)

 

	public class MemberDAO implements IDAO {
    
    @Override
	public int deleteMember(String id) {
		String sql = "DELETE FROM jdbc_concept5 WHERE id=?";
		try {
			//위 구문을 알아서 치환해 주고
			ps = con.prepareStatement(sql);
			//위 구문의 아이디와 입력값이 동일 하다면
			ps.setString(1, id);
			//update를 반환.
			return ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		//거짓일 경우 0을 반환.
		return 0;
	}
    }

 

프로그램 종료

public void disconnection() {
		//연결 종료와 관련된 것.
		try {
			if (rs != null)
				rs.close();
			if (ps != null)
				ps.close();
			if (con != null)
				con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}