DB - DB, 이클립스 연동 후 회원정보 프로그램 구축하는 퀴즈 02 (2022-08-08)
2022. 8. 8. 21:53ㆍ3층 1구역 - 개발의 장/Oracle DataBase
이번 게시물에서는 Main 코드에서 쓰던
검증 파트
중복된 이메일이 있으면 회원정보가 등록이 안되거나
회원정보가 없으면 이메일로 검색할 때 회원정보가 없다 라고 뜨는.....
그것을 Main.java에 그대로 쓰고, DB로 옮겨지는 작업을 MemberDAO로 분리해보도록 하자. (또 분리하기 시작한다....)
MemberDTO.java
package jdbc_concept3;
//입,출력에 직접적으로 나타나는 코드들
public class MemberDTO {
private String email;
private String name;
private String mobile;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
인터페이스 - IMemberDAO.java
package jdbc_concept3;
//자식 클래스에게 빈 설계도를 넘겨줌.
import java.util.ArrayList;
public interface IMemberDAO {
public int isExists(String email);
public void insert(MemberDTO member);
public MemberDTO selectEmail(String email);
public int delete(String email);
public ArrayList<MemberDTO> selectAll();
public void update(MemberDTO member);
}
MemberDAOImpl.java
package jdbc_concept3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
//main코드에서 하던 검증 및 저장의 역할을 하는
//DB와 관련된 코드
public class MemberDAOImpl implements IMemberDAO {
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
public MemberDAOImpl() {
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();
}
}
@Override
public int isExists(String email) {
String sql = "SELECT count(email) FROM jdbc_concept2 WHERE email=?";
int count = 0;
try {
ps = con.prepareStatement(sql);
ps.setString(1, email);
rs = ps.executeQuery();
if (rs.next()) {
count = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return count;
}
@Override
public void insert(MemberDTO member) {
String sql = "INSERT INTO jdbc_concept2 VALUES(?, ?, ?)";
try {
ps = con.prepareStatement(sql);
ps.setString(1, member.getEmail());
ps.setString(2, member.getName());
ps.setString(3, member.getMobile());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public MemberDTO selectEmail(String email) {
String sql = "SELECT * FROM jdbc_concept2 WHERE email=?";
try {
ps = con.prepareStatement(sql);
ps.setString(1, email);
rs = ps.executeQuery();
if (rs.next()) {
MemberDTO member = new MemberDTO();
member.setEmail(rs.getString("email"));
member.setName(rs.getString("name"));
String mobile = rs.getString("mobile");
member.setMobile(mobile);
return member;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public int delete(String email) {
String sql = "DELETE FROM jdbc_concept2 WHERE email=?";
int check = 0;
try {
ps = con.prepareStatement(sql);
ps.setString(1, email);
check = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return check;
}
@Override
public ArrayList<MemberDTO> selectAll() {
String sql = "SELECT * FROM jdbc_concept2";
ArrayList<MemberDTO> members = new ArrayList<>();
try {
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
MemberDTO member = new MemberDTO();
member.setEmail(rs.getString("email"));
member.setName(rs.getString("name"));
String mobile = rs.getString("mobile");
member.setMobile(mobile);
members.add(member);
}
} catch (Exception e) {
e.printStackTrace();
}
return members;
}
@Override
public void update(MemberDTO member) {
String sql = "UPDATE jdbc_concept2 SET name=?, mobile=? WHERE email=?";
try {
ps = con.prepareStatement(sql);
ps.setString(1, member.getName());
ps.setString(2, member.getMobile());
ps.setString(3, member.getEmail());
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();
}
}
}
Main.java
package jdbc_concept3;
import java.util.ArrayList;
import java.util.Scanner;
//메뉴를 선택하고 사용자가 입력값을 적으면
//Main에서 입력값에 대한 검증을 한 후,
//MemberDAOImpl로 가서 DB에 저장
public class Main {
private static MemberDAOImpl memberDao = new MemberDAOImpl();
private static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println("1. 회원 등록");
System.out.println("2. 회원 검색");
System.out.println("3. 회원 삭제");
System.out.println("4. 회원 모두 보기");
System.out.println("5. 회원 수정");
System.out.println("6. 프로그램 종료");
System.out.print("선택 > ");
int select;
try {
select = Integer.parseInt(in.next());
} catch (Exception e) {
continue;
}
switch (select) {
case 1:
insert();
break;
case 2:
selectEmail();
break;
case 3:
delete();
break;
case 4:
selectAll();
break;
case 5:
update();
break;
case 6:
disconnection();
System.out.println("프로그램을 종료합니다.");
System.exit(0);
default:
System.out.println("메뉴 확인 후 다시 입력하세요.");
}
}
}
private static void disconnection() {
memberDao.disconnection();
}
private static void insert() {
MemberDTO member = new MemberDTO();
System.out.println("=== 회원 등록 ===");
System.out.print("이메일 : ");
member.setEmail(in.next());
// 중복 확인
int count = memberDao.isExists(member.getEmail());
if (count == 0) {
System.out.print("이름 : ");
member.setName(in.next());
System.out.print("전화번호 : ");
member.setMobile(in.next());
memberDao.insert(member);
} else
System.out.println(member.getEmail() + "는/은 등록된 이메일입니다.");
}
private static void selectEmail() {
System.out.println("=== 회원 검색 ===");
System.out.print("이메일 : ");
String email = in.next();
int count = memberDao.isExists(email);
if (count == 0) {
System.out.println(email + "는/은 등록된 정보가 아닙니다.");
} else {
MemberDTO selectData = memberDao.selectEmail(email);
if (selectData == null) {
System.out.println("정보를 얻어 올 수 없는 상황");
} else {
System.out.println("이메일 : " + selectData.getEmail());
System.out.println("이름 : " + selectData.getName());
System.out.println("전화번호 : " + selectData.getMobile());
}
}
System.out.println();
}
private static void delete() {
System.out.println("=== 회원 삭제 ===");
System.out.print("이메일 : ");
String email = in.next();
int count = memberDao.isExists(email);
if (count == 0) {
System.out.println(email + "는/은 등록된 정보가 아닙니다.");
return;
}
int rowCount = memberDao.delete(email);
if (rowCount == 1)
System.out.println(email + "님의 정보가 삭제되었습니다.");
else if (rowCount == 0)
System.out.println(email + "님의 정보가 삭제되지 않았습니다. 다시 시도하세요.");
}
private static void selectAll() {
ArrayList<MemberDTO> members = memberDao.selectAll();
if (members.isEmpty() == true) {
System.out.println("등록 후 이용하세요.");
} else {
for (MemberDTO m : members) {
System.out.println("이메일 : " + m.getEmail());
System.out.println("이름 : " + m.getName());
System.out.println("전화번호 : " + m.getMobile());
System.out.println();
}
}
}
private static void update() {
System.out.println("=== 회원 수정 ===");
System.out.print("이메일 : ");
String email = in.next();
int count = memberDao.isExists(email);
if (count == 0) {
System.out.println(email + "는/은 등록된 정보가 아닙니다.");
return;
}
System.out.print("이름 : ");
String name = in.next();
System.out.print("전화번호 : ");
String mobile = in.next();
MemberDTO member = new MemberDTO();
member.setEmail(email);
member.setName(name);
member.setMobile(mobile);
memberDao.update(member);
System.out.println(email + "님의 정보가 수정되었습니다.");
}
}
'3층 1구역 - 개발의 장 > Oracle DataBase' 카테고리의 다른 글
DB - DB연동을 통한 회원관리 프로그램 구축 하는 퀴즈(2022-08-09) (0) | 2022.08.09 |
---|---|
DB - DB, 이클립스 연동 후 회원정보 프로그램 구축하는 퀴즈 03 (2022-08-08) (0) | 2022.08.08 |
DB - DB, 이클립스 연동 후 회원정보 프로그램 구축하는 퀴즈 (2022-08-07) (0) | 2022.08.07 |
DB - 오라클과 이클립스(자바) 정보삭제(Delete) (2022-08-06) (0) | 2022.08.06 |
DB - 오라클과 이클립스(자바) 정보수정(Update) (2022-08-06) (0) | 2022.08.06 |