ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JDBC 예제
    JAVA 2022. 7. 19. 17:08

    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;
    			}
    		}
    	}
    }

     

    'JAVA' 카테고리의 다른 글

    상속 예제  (0) 2022.07.19
    ArrayLIst 예제  (0) 2022.07.19
    객체 배열 예제  (0) 2022.07.19
    OOP 예제  (0) 2022.07.19
    메소드 예제  (0) 2022.07.19

    댓글

Designed by Tistory.