DB - 회원관리 프로그램 DAO 부분 상세설명(2022-08-09)
2022. 8. 9. 12:46ㆍ3층 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();
}
}
'3층 1구역 - 개발의 장 > Oracle DataBase' 카테고리의 다른 글
DB - JAVA로 게시판 만드는 퀴즈(1) - 간략한 흐름 '편'(2022-08-10) (0) | 2022.08.10 |
---|---|
DB - 회원관리 프로그램 View 부분 상세설명(2022-08-09) (0) | 2022.08.09 |
DB - DB연동을 통한 회원관리 프로그램 구축 하는 퀴즈(2022-08-09) (0) | 2022.08.09 |
DB - DB, 이클립스 연동 후 회원정보 프로그램 구축하는 퀴즈 03 (2022-08-08) (0) | 2022.08.08 |
DB - DB, 이클립스 연동 후 회원정보 프로그램 구축하는 퀴즈 02 (2022-08-08) (0) | 2022.08.08 |