-
EX_01. 학생 관리 프로그램
1-1. Model
1-1-1. VO
package Model; public class Student { // 데이터 값을 저장하게끔 설계하는 클래스 // VO - Value Object - setter 메소드가 없음 // DTO - Data Transfer Object - setter 메소드가 있음 private int stdnum; private int age; private String tel; private String email; private String name; private String updateName; /** * @param stdnum * @param name * @param age * @param tel * @param email */ public Student(int stdnum, String name, int age, String tel, String email) { super(); this.stdnum = stdnum; this.name = name; this.age = age; this.tel = tel; this.email = email; } /** * @param name */ public Student(String name) { super(); this.name = name; } //overloading public Student(String name, int age, String tel, String email) { this.name = name; this.age = age; this.tel = tel; this.email = email; } public int getStdnum() { return stdnum; } public int getAge() { return age; } public String getTel() { return tel; } public String getEmail() { return email; } public String getName() { return name; } public String getupdateName() { return updateName; } /** * @param name */ public Student(int stdnum, String updateName) { super(); this.stdnum = stdnum; this.updateName = updateName; } public String getUpdateName() { return updateName; } /** * */ public Student(int stdnum) { this.stdnum = stdnum; } public int getInt(int stdnum2) { // TODO Auto-generated method stub return 0; } }
1-1-2. DAO
package Model; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; public class StudentDAO { // data access object /* * JDBC 코드를 전부 관리한느 도구역할! data access object */ // 1. 필드 private Connection conn = null; private PreparedStatement psmt = null; private ResultSet rs = null; public void getConn() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521/xe"; String user = "hr"; String password = "hr"; conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // getClose : 자원을 반납하는 메서드 만들고 사용하기 // rs ---> psmt ---> conn // 이미 사용하고 있는지 아닌지에 대해서 if문으로 판단하기때문에 문제가 없습니다. public void getClose() { try { if (rs != null) { rs.close(); } if (psmt != null) { psmt.close(); } if (conn != null) // 자원을 반납하는 메소드 conn.close(); } catch (SQLException e) { e.printStackTrace(); System.out.println("자원반납시 생긴 오류!"); } } // 2. 메소드 public int insert(Student s) { int row = 0; try { getConn(); String sql = "insert into student values(stdnum.nextval,?,?,?,?)"; psmt = conn.prepareStatement(sql); psmt.setString(1, s.getName()); psmt.setInt(2, s.getAge()); psmt.setString(3, s.getTel()); psmt.setString(4, s.getEmail()); row = psmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { getClose(); } return row; } public int delete(Student d_s) { int row = 0; try { getConn(); String sql = "delete from student where name=?"; psmt = conn.prepareStatement(sql); psmt.setString(1, d_s.getName()); row = psmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { getClose(); } return row; } public int update(Student u_s) { int row = 0; try { getConn(); String sql = "update student set name = ? where stdnum = ?"; psmt = conn.prepareStatement(sql); psmt.setString(1, u_s.getupdateName()); psmt.setInt(2, u_s.getStdnum()); row = psmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { getClose(); } return row; } public ArrayList<Student> all_select() { ResultSet rs = null; // 전체 학생정보를 저장할 ArrayList!! // 학생이 전부 몇명인지 명확하게 모르기 때문에 가변배열 사용 ArrayList<Student> list = new ArrayList<Student>(); try { getConn(); String sql = "select * from student"; psmt = conn.prepareStatement(sql); rs = psmt.executeQuery(); while (rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); String tel = rs.getString("tel"); String email = rs.getString("email"); // 리턴을 시켜주기 위해서 하나의 데이터로 묶기 Student s = new Student(name, age, tel, email); list.add(s); } } catch (SQLException e) { e.printStackTrace(); System.out.println("데이터베이스 연결 실패"); } finally { getClose(); } return list; } // 내가 돌려받아야 할 값 --> name, age, phone, email, stdnum -->Student (vo)자료형 // 메소드명 selectOne(); // return -> Student가 가져온 값을 리턴 public Student selectOne(Student s_o) { ResultSet rs = null; Student st = null; ArrayList<Student> list = new ArrayList<Student>(); try { getConn(); String sql = "select * from student where stdnum = ?"; psmt = conn.prepareStatement(sql); psmt.setInt(1, s_o.getStdnum()); rs = psmt.executeQuery(); if(rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); String tel = rs.getString("tel"); String email = rs.getString("email"); // 리턴을 시켜주기 위해서 하나의 데이터로 묶기 //Student s = new Student(name, age, tel, email); st = new Student(name, age, tel, email); //list.add(s); } } catch (SQLException e) { e.printStackTrace(); System.out.println("데이터베이스 연결 실패"); } finally { getClose(); } return st; } }
1-2. Controller
1-2-1. Controller
package controller; import java.util.ArrayList; import Model.Student; import Model.StudentDAO; public class Controller { Student s = null; // model StudentDAO dao = new StudentDAO(); // controller // Main(사용자에게 입력받음) --> Controller -> StudentDAO(Data base 와 연결되어있는부분) --> // Controller --> View // view : name, age, tel, email public void insert(Student s) { // return row ---> int int row = dao.insert(s); if (row > 0) { System.out.println("데이터 추가 성공!"); } else { System.out.println("데이터 추가 실패!"); } } public void delete(Student s) { int row = dao.delete(s); if (row > 0) { System.out.println("데이터 삭제 성공!"); } else { System.out.println("데이터 삭제 실패!"); } } public void update(Student u_s) { int row = dao.update(u_s); if (row > 0) { System.out.println("데이터 업데이트 성공!"); } else { System.out.println("데이터 업데이트 실패!"); } } public void selectAll() { ArrayList<Student> list = dao.all_select(); for(Student s : list) { System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getTel() + "\t" + s.getEmail()); } } /* * public void selectOne(int stdnum) { * Student std= dao.selectOne(stdnum); * System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail()); */ public void selectOne(Student s_o) { Student s1 = dao.selectOne(s_o); System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail()); } }
1-3. View
1-3-1. Main
package View; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Scanner; import controller.Controller; import Model.Student; import Model.StudentDAO; public class Main { private static final Student Student = null; public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = ""; Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; StudentDAO dao = new StudentDAO(); int row = 0; String email = ""; int age = 0; int input = 0; String delete_name = ""; String updateName = ""; int stdnum = 0; Controller c = new Controller(); while (input!=6) { System.out.print("[1]학생추가 [2]학생삭제 [3]학생수정 [4]전체학생조회 [5]특정학생조회 [6]종료 >> "); input = sc.nextInt(); switch (input) { case 1: System.out.println("========학생추가========"); System.out.println("학생정보를 추가합니다"); System.out.print("이름 : "); name = sc.next(); System.out.print("나이 : "); age = sc.nextInt(); System.out.print("번호 : "); String phone = sc.next(); System.out.print("email : "); email = sc.next(); // 데이터베이스 연결 관리해주는 도구 생성 // DAO로 전송해줄 자료형태를 만들기 Student s = new Student(name, age, phone, email); //row = dao.insert(s); c = new Controller(); c.insert(s); /*if (row > 0) { System.out.println("데이터 추가 성공!"); } else { System.out.println("데이터 추가 실패!"); }*/ break; case 2: System.out.println("========학생삭제========"); System.out.print("이름 입력 >> "); delete_name = sc.next(); Student d_s = new Student(delete_name); c.delete(d_s); break; case 3: System.out.println("========학생수정========"); System.out.print("수정할 학생번호 입력해주세요 >>"); stdnum = sc.nextInt(); System.out.println("어떤 이름으로 수정 ? >>"); updateName = sc.next(); Student u_s = new Student(stdnum, updateName); c.update(u_s); break; case 4: System.out.println("========전체학생조회========"); c.selectAll(); //list안에 있는 모든 데이터 출력하기 // for-each문 --> 배열안에 들어있는 데이터의 개수만큼 반복시켜주는 구문 // 인덱스 순차적으로 데이터에 접근해서 하나씩 하나씩 뽑아낸 데이터를 // s라는 공간에 담아주는 형태로 반복문이 진행! //for(Student s1:list) { // System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail()); //} break; case 5: System.out.println("========특정학생조회========"); // 1.학생번호 입력받기 System.out.println("조회하고 싶은 학생번호 입력 >> "); stdnum = sc.nextInt(); Student s_o = new Student(stdnum); c.selectOne(s_o); //stdnum을 dao에 보내서 검색결과를 받아오게 만들자 // dao.selectOne을 호출할때에는 std(name, age, tel, email)을 가지고만 왔다. //ArrayList<Student> list2 = dao.selectOne(s_o); //Student s1 = dao.selectOne(s_o); //System.out.println(list2getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail()); //System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail()); break; case 6: System.out.println("========종료========"); break; default: System.out.println("========잘못된 숫자 입력!!!!========="); break; } } } }