본문 바로가기

Backend/Java

DTO DAO 구현 예제

DTO DAO에 대한 기본 개념은 아래 링크 참조

https://olli2.tistory.com/5

 

아래와 같은 구조 및 값을 갖는 sqldb2 데이터베이스의 student 테이블에 접근하여

출력/삽입/수정/삭제 연산을 수행하기 위한 예제 구현


StudentDTO.java : 데이터 저장

StudentDAO.java : 생성자에서 DB 연결 + select, insert, update, delete 기능 구현

StudentSelect.java : 데이터 출력 (select)

StudentInsert.java : 데이터 삽입 (insert)

StudentUpdate.java : 데이터 수정 (update)

StudentDelete.java : 데이터 삭제 (delete)

StudentMain : switch 문 사용해 메뉴 처리


StudentDTO.java : 데이터 저장

public class StudentDTO {
	private String stdNo;
	private String stdName;
	private int stdYear;
	private String stdAddress;
	private String stdBirthDay;
	private String dptNo;
	
	public StudentDTO(String stdNo, String stdName, int stdYear, String stdAddress, String stdBirthDay, String dptNo) {
		this.stdNo = stdNo;
		this.stdName = stdName;
		this.stdYear = stdYear;
		this.stdAddress = stdAddress;
		this.stdBirthDay = stdBirthDay;
		this.dptNo = dptNo;
	}
	
	// Setters / Getters
	public String getStdNo() {
		return stdNo;
	}

	public void setStdNo(String stdNo) {
		this.stdNo = stdNo;
	}

	public String getStdName() {
		return stdName;
	}

	public void setStdName(String stdName) {
		this.stdName = stdName;
	}

	public int getStdYear() {
		return stdYear;
	}

	public void setStdYear(int stdYear) {
		this.stdYear = stdYear;
	}

	public String getStdAddress() {
		return stdAddress;
	}

	public void setStdAddress(String stdAddress) {
		this.stdAddress = stdAddress;
	}

	public String getStdBirthDay() {
		return stdBirthDay;
	}

	public void setStdBirthDay(String stdBirthDay) {
		this.stdBirthDay = stdBirthDay;
	}

	public String getDptNo() {
		return dptNo;
	}

	public void setDptNo(String dptNo) {
		this.dptNo = dptNo;
	}
}

StudentDAO.java : 생성자에서 DB 연결

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;

public class StudentDAO {
	Connection con = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	public StudentDAO() {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			String url = "jdbc:mysql://localhost:3306/sqldb2?serverTimezone=UTC";
			String user = "root";
			String pwd = "1234";
			
			con = DriverManager.getConnection(url, user, pwd);
			
		} catch (Exception e) {
			System.out.println("오류 발생");
			e.printStackTrace();
		}
	}
	
	public void selectStudent() {
		try {
			String sql = "select * from student order by stdNo";
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery(sql);
			
			while(rs.next()) {
				String stdNo = rs.getString(1);
				String stdName = rs.getString(2);
				int stdYear = rs.getInt(3);
				String stdAddress = rs.getString(4);
				Date stdBirthday = rs.getDate(5);
				String dptNo = rs.getString(6);
				
				System.out.format("%-10s\t %-10s\t %-4d %-20s %13s %5s\n",
						stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
			}
		} catch (Exception e) {
			System.out.println("오류 발생");
			e.printStackTrace();
		}
	}
	
	public void insertStudent(StudentDTO dto) {
		try {
			String sql = "insert into student values(?, ?, ?, ?, ?, ?)";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, dto.getStdNo());
			pstmt.setString(2, dto.getStdName());
			pstmt.setInt(3, dto.getStdYear());
			pstmt.setString(4, dto.getStdAddress());
			pstmt.setString(5, dto.getStdBirthDay());
			pstmt.setString(6, dto.getDptNo());
			
			pstmt.executeUpdate();
			
		} catch (Exception e) {
			System.out.println("오류 발생");
			e.printStackTrace();
		}
	}
	
	public void updateStudent(StudentDTO dto) {
		try {
			String sql = "update student set stdName=?, stdYear=?, stdAddress=?, stdBirthDay=?, dptNo=? where stdNo=?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, dto.getStdName());
			pstmt.setInt(2, dto.getStdYear());
			pstmt.setString(3, dto.getStdAddress());
			pstmt.setString(4, dto.getStdBirthDay());
			pstmt.setString(5, dto.getDptNo());
			pstmt.setString(6, dto.getStdNo());
	
			int result = pstmt.executeUpdate();
			
			if (result > 0) {
				System.out.println("데이터 수정 성공!");
				}
			} catch (Exception e) {
				System.out.println("오류 발생!");
				e.printStackTrace();
				}
		}
	
	public void deleteStudent(String stdNo) {
		try {
			String sql = "delete from student where stdNo=?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, stdNo);
			
			int result = pstmt.executeUpdate();
			
			if (result > 0) {
				System.out.println("데이터 삭제 성공!");
			}
			
		} catch (Exception e) {
			System.out.println("오류 발생!");
			e.printStackTrace();
		}
	}
}

StudentSelect.java : 데이터 출력 (select)

import java.util.Date;
import java.util.Scanner;

public class StudentSelect{
	public void select() {
		StudentDAO stdDAO = new StudentDAO();
		stdDAO.selectStudent();
	}
}

StudentInsert.java : 데이터 삽입 (insert)

import java.util.Date;
import java.util.Scanner;

public class StudentInsert{
	
	public void insert() {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("학생 정보 등록");
		System.out.println("----------------------\n");
		
		System.out.print("학번 입력 : ");
		String stdNo = sc.nextLine();
		
		System.out.print("성명 입력 : ");
		String stdName = sc.nextLine();
		
		System.out.print("학년 입력 : ");
		int stdYear = Integer.parseInt(sc.nextLine());
		
		System.out.print("주소 입력 : ");
		String stdAddress = sc.nextLine();
		
		System.out.print("생년월일 입력 : ");
		String stdBirthday = sc.nextLine();
		
		System.out.print("학과번호 입력 : ");
		String dptNo = sc.nextLine();
		
		StudentDTO stdDTO = new StudentDTO(stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
		StudentDAO stdDAO = new StudentDAO();
		stdDAO.insertStudent(stdDTO);
		
	}
}

StudentUpdate.java : 데이터 수정 (update)

import java.util.Scanner;

public class StudentUpdate {
	public void update() {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("학생 정보 수정");
		System.out.println("----------------------\n");
		
		System.out.print("수정할 학생의 학번 입력 : ");
		String stdNo = sc.nextLine();
		
		System.out.print("성명 입력 : ");
		String stdName = sc.nextLine();
		
		System.out.print("학년 입력 : ");
		int stdYear = Integer.parseInt(sc.nextLine());
		
		System.out.print("주소 입력 : ");
		String stdAddress = sc.nextLine();
		
		System.out.print("생년월일 입력 : ");
		String stdBirthday = sc.nextLine();
		
		System.out.print("학과번호 입력 : ");
		String dptNo = sc.nextLine();
		
		StudentDTO stdDTO = new StudentDTO(stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
		StudentDAO stdDAO = new StudentDAO();
		stdDAO.updateStudent(stdDTO);
	}
}

StudentDelete.java : 데이터 삭제 (delete)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class StudentDelete {
	public void delete() {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("학생 정보 삭제");
		System.out.println("----------------------\n");
		
		System.out.print("삭제할 학생의 학번 입력 : ");
		String stdNo = sc.next();
		
		StudentDAO stdDAO = new StudentDAO();
		stdDAO.deleteStudent(stdNo);
	}
}

StudentMain : switch 문 사용해 메뉴 처리

import java.util.Scanner;

public class StudentMain {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("************************");
		System.out.println("     학생 관리 프로그램");
		System.out.println("************************");
		System.out.println("     다음 메뉴에서 선택");
		System.out.println("************************");
		System.out.println("1. 학생 등록");
		System.out.println("2. 학생 정보 조회");
		System.out.println("3. 학생 정보 수정");
		System.out.println("4. 학생 정보 삭제");
		System.out.println("5. 종료");
		System.out.println("------------------------------------------");
		System.out.print("메뉴 번호 입력 : ");
		int chioce = sc.nextInt();
		
		switch(chioce) {
		case 1 :
			StudentInsert stdInsert = new StudentInsert();
			stdInsert.insert();
			break;
		case 2 :
			StudentSelect stdSelect = new StudentSelect();
			stdSelect.select();
			break;
		case 3 :
			StudentUpdate stdUpdate = new StudentUpdate();
			stdUpdate.update();
			break;
		case 4 :
			StudentDelete stdDelete = new StudentDelete();
			stdDelete.delete();
			break;
		case 5 :
			break;
		default :
			System.out.println("\n잘못 입력하셨습니다.");
	}
		System.out.println("------------------------------------------");
		System.out.println("종료되었습니다.");
		System.out.println("------------------------------------------");
	}
}

'Backend > Java' 카테고리의 다른 글

컬렉션 프레임워크(Collection Framework)  (0) 2021.11.30
제네릭 (Generic)  (0) 2021.11.29
JDBC 연동 구현 예제  (0) 2021.11.26
Statement VS PreparedStatement  (0) 2021.11.26
DAO DTO VO 개념  (0) 2021.11.25