M (Model) : 데이터 처리 담당
V (View) : 사용자가 보게 될 화면 담당 (출력 및 입력)
C (Controller) : 사용자의 요청 처리해주는 담당
EX ) 회원관리 프로그램
oracle 의 MEMBER 테이블과 연동하여 회원관리 프로그램 만들기
1. oracle 의 MEMBER 테이블을 참조하여 이클립스 Model.vo 패키지에 Member 클래스 생성
2. View 패키지에 사용자가 보게될 메인 메뉴 출력
public class MemberMenu {
private Scanner sc = new Scanner(System.in);
private MemberController mc = new MemberController();
/**
* 사용자가 보게될 첫 화면 (메인화면)
*/
public void mainMenu() {
while(true) {
System.out.println("\n==== 회원 관리 프로그램 ===");
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.println("0. 프로그램 종료");
System.out.print(">> 메뉴선택 : ");
int menu = sc.nextInt();
sc.nextLine();
switch(menu) {
case 1 : inputMember(); break;
case 2 : mc.selectList(); break;
case 3 : String userId = inputMemberId();
mc.selectByUserId(userId);
break;
case 4 : String keyword = inputMemberId();
mc.selectByUserName(keyword);
break;
case 5 : updateMember(); break;
case 6 : mc.deleteMember(inputMemberId()); break;
case 0 : System.out.println("\n이용해 주셔서 감사합니다. 프로그램을 종료합니다."); return;
default :System.out.println("\n메뉴를 잘못 입력했습니다. 다시 입력해주세요.");
}
}
}
1_1. View ) 회원 추가 메뉴 ( 추가하고자 하는 회원의 정보 입력받아 추가요청 보냄)
public void inputMember() {
System.out.println("\n==== 회원 추가 ====");
//아이디~취미 입력 받기
System.out.print("회원 아이디: ");
String userId = sc.nextLine();
System.out.print("비밀번호 : ");
String userPwd = sc.nextLine();
System.out.print("이름: ");
String userName = sc.nextLine();
System.out.print("성별(M/F): ");
String gender = sc.nextLine().toUpperCase();
System.out.print("나이 : ");
String age = sc.nextLine(); // 문자열 "19"
System.out.print("이메일 : ");
String email = sc.nextLine();
System.out.print("휴대폰번호('-'제외 입력): ");
String phone = sc.nextLine();
System.out.print("주소 : ");
String address = sc.nextLine();
System.out.print("취미(,로 연이어 작성) : ");
String hobby = sc.nextLine();
//회원 추가 요청 == Controller 메소드 호출
mc.insertMember(userId,userPwd,userName,gender,age,email,phone,address,hobby);
1_2. Controller) 사용자에게 입력받은 값을 MemberDao로 전달하고 , 그 결과를 도출해서 다시 View로 전달해서 출력
public void insertMember(String userId,String userPwd, String userName,
String gender,String age,String email,
String phone,String address, String hobby) {
Member m = new Member(userId,userPwd,userName,gender,Integer.parseInt(age),email,phone,address,hobby);
// age를 String형으로 입력받았으니 생성자생성시에는 int형으로 파싱
int result = new MemberDao().insertMember(m);
//성공인지, 실패인지 판단
if(result > 0 ) {
new MemberMenu().displaySuccess("성공적으로 회원이 추가되었습니다.");
}else {
new MemberMenu().displayFail("회원 추가를 실패했습니다.");
}
}
1_3. Dao) Controller로 부터 사용자가 입력한 값을 객체로 전달받은 후 JDBC과정을 거쳐 결과값(처리된 행수)을 반환
public int insertMember(Member m) {
//insert문 ==> 처리된 행수 (int) ==> 트랜잭션 처리
int result = 0;
Connection conn = null;
Statement stmt = null;
// 실행할 sql문 (완성형태로 만들기=> Statement객체 : sql문이 완성형태여야만 실행)
String sql = "INSERT INTO MEMBER VALUES(SEQ_USERNO.NEXTVAL, "
+ "'" + m.getUserId() +"', "
+ "'" + m.getUserPwd() +"', "
+ "'" + m.getUserName()+"', "
+ "'" + m.getGender() + "', "
+ m.getAge() + ", "
+ "'" + m.getEmail() + "', "
+ "'" + m.getPhone() + "', "
+ "'" + m.getAddress() + "', "
+ "'" + m.getHobby() + "', SYSDATE)";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC","JDBC");
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
if(result > 0) {
conn.commit();
}else {
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result; // 1(성공) 아니면 0 (실패)반환
}
1_4. View ) 서비스요청처리 후 결과를 출력할 응답화면
public void displaySuccess(String message) {
System.out.println("\n 서비스 요청 성공 : "+ message);
}
public void displayFail(String message) {
System.out.println("\n 서비스 요청 실패 : "+ message);
}
2_1. View) 회원 전체 조회 메뉴 : 입력받을 값이 없으므로 바로 Controller호출
2_2 . Controller) Dao를 호출하고 그값을 ArrayList에 돌려받은 후 , 조회결과 성공 유무를 판단해 View에 전달
public void selectList() {
ArrayList<Member> list = new MemberDao().selectList();
// 조회 결과가 있는지 없는지 판단 후 => 사용자가 보게될 응답 뷰 지정
if(list.isEmpty()) {// 조회결과 없을 경우
new MemberMenu().displayNoData("전체 조회 결과가 없습니다.");
}else { // 조회결과가 있을 경우
new MemberMenu().displayMemberList(list);
}
}
2_3. Dao) JDBD과정을 통해 받은 결과를 객체에 담은 후 ArrayList에 옮겨담아 List를 다시 Controller로 전달
public ArrayList<Member> selectList() {
//select문 (여러행 조회) => ResultSet 객체 => java객체(ArrayList)에 옮겨담기
ArrayList<Member> list = new ArrayList<>(); //텅빈리스트
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
String sql = "SELECT * FROM MEMBER";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC","JDBC");
stmt = conn.createStatement();
rset = stmt.executeQuery(sql);
while(rset.next()) {
//현재 rset의 커서가 가리키고있는 해당 행의 모든 컬럼값을 뽑아서 Member객체에 담기
Member m = new Member(rset.getInt("user_no"),
rset.getString("user_id"),
rset.getString("user_pwd"),
rset.getString("user_name"),
rset.getString("gender"),
rset.getInt("age"),
rset.getString("email"),
rset.getString("phone"),
rset.getString("address"),
rset.getString("hobby"),
rset.getDate("enroll_date"));
list.add(m);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rset.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list; // 조회된 결과 없으면 텅빈리스트 | 조회결과 있으면 결과가 담긴 리스트
}
2_4) 서비스 요청 조회결과를 출력하는 응답화면
List가 비어있을경우(조회된 결과가 없을경우) : 데이터 없음 메시지 출력
List가 채워져있을경우( 조회된 결과가 있을경우) : 반복문을 통해 list 전체를 출력
public void displayNoData(String message) {
System.out.println("\n" + message);
}
public void displayMemberList(ArrayList<Member> list) {
System.out.println("\n조회된 데이터는 다음과 같습니다.");
for(int i =0; i<list.size();i++) {
System.out.println(list.get(i));
}
'JDBC' 카테고리의 다른 글
JDBC 03 _ mvc 패턴 이용한 JDBC_Prepared Statement (0) | 2022.12.05 |
---|---|
JDBC 02 _ mvc 패턴 이용한 JDBC Statement(2) (0) | 2022.12.01 |
JDBC 01 _ delete문 (0) | 2022.11.30 |
JDBC 01 _ update문 (0) | 2022.11.30 |
JDBC 01 _ 여러행 select문 조회 (0) | 2022.11.30 |