본문 바로가기
프로그래밍 언어/데이터베이스

데이터베이스 Day7 - Java + DB 연동(3)

by Hyeon_ 2021. 11. 26.

DB 연동 프로그램

  • db5 패키지
  • 메뉴 사용
  • db3 패키지의 DAO/DTO를 사용한 Stuent 예제를 다음과 같이 변경
  • 작성 클래스(java 파일 5개/db3의 DAO,DTO를 import 해온다고 하면 3개)
    • StudentDTO
    • StudentDAO
    • studentInsert: 메소드 생성(입력받고, DAO insert() 호출)
    • StudentSelect: 메소드 (DAO select() 호출)
    • StudentMain: switch문 사용해서 메뉴 정리

StudentDTO

package db5;

public class StudentDTO {
    private String stdNo;
    private String stdName;
    private int stdYear;
    private String stdAddress;
    private String stdBirthday;
    private String dptNo;

    // 매개변수가 있는 생성자
    // 생성자는 StudentDTO 클래스 객체가 생성될 때 자동으로 호출되면서
    // 생성자의 매개변수 값을 받음
    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;
    }

    // getter/setter 생성
    // get: 멤버변수의 값을 반환해줄 때 사용
    // set: 멤버변수에 값을 저장할 때 사용
    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

package db5;

//(1) 생성자에서 DB 연결
//(2) selectStudent() 메서드 : 데이터베이스의 student 테이블에서 select 한 결과 출력
//(3) insertStudent(StudentDTO dto) 메서드
//        - main()에서 입력한 student 데이터를 전달 받아서
//   - student 테이블에 insert 작업 수행

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

public class StudentDAO {
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    // 생성자 : 데이터베이스 연결
    public StudentDAO() {
        try {
            //JDBC Driver 클래스의 객체 생성 런타임시 로드
            //Class.forName("com.mysql.cj.jdbc.Driver");

            // 연결 주소, 사용자 계정, 패스워드 문자열 설정
            String url = "jdbc:mysql://localhost:3306/sqldb2?serverTimezone=UTC";
            String user = "root";
            String pwd = "1234";

            // DB 연결하기 위한 객체 생성
            // DriverManager를 통해 Connection 객체 생성
            // MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
            con = DriverManager.getConnection(url, user, pwd);

            // Connection 객체가 생성되면 DB 연결 성공
            if(con != null) {
                System.out.println("DB 연결 성공!");
            }

        } catch (Exception e) {
            System.out.println("오류 발생!");
            e.printStackTrace();
        }
    }

    //(2) selectStudent() 메서드
    public void selectStudent() {

        try {
            // sql 직성
            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();
        }
    }

    //(3) insertStudent(StudentDTO dto)
    public void insertStudent(StudentDTO dto) {
        try {
            // sql문 작성
            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());

            int result = pstmt.executeUpdate();

            if(result > 0) System.out.println("데이터 입력 성공");

        } catch (Exception e) {
            System.out.println("오류 발생");
            e.printStackTrace();
        }
    }
    public void updateStudent(StudentDTO dto){
        try {
            // sql문 작성
            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(StudentDTO dto){
        try {
            // SQL 작성
            String sql = "delete from student where stdNo=?";

            pstmt = con.prepareStatement(sql);
            pstmt.setString(1,dto.getStdNo());

            int result = pstmt.executeUpdate();

            if(result > 0) System.out.println("데이터 삭제 성공");

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

StudentInsert

package db5;

import db3.StudentDAO;
import db3.StudentDTO;

import java.util.Scanner;

public class StudentInsert {
    public void studentInsert(){
        Scanner scan = new Scanner(System.in);
        StudentDAO stdDAO = new StudentDAO();

        // 학생 데이터 입력: stdentDAO 클래스의 insertStudetn() 메서드 호출
        System.out.println("학생 정보 등록");
        System.out.println("-------------------------\n");

        System.out.print("학번 입력: ");
        String stdNo = scan.nextLine();

        System.out.print("이름 입력: ");
        String stdName = scan.nextLine();

        System.out.print("학년 입력: ");
        int stdYear = scan.nextInt();

        scan.nextLine();

        System.out.print("주소 입력: ");
        String stdAddress = scan.nextLine();

        System.out.print("생일 입력: ");
        String stdBirthday = scan.nextLine();

        System.out.print("학과번호 입력: ");
        String dptNo = scan.nextLine();

        StudentDTO stdDTO = new StudentDTO(stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
        stdDAO.insertStudent(stdDTO);
    }
}

StudentSelect

package db5;

import db3.StudentDAO;

public class StudentSelect {
    public void studentSelect(){
        StudentDAO stdDAO = new StudentDAO();

        stdDAO.selectStudent();
    }
}

StudentMain

package db5;

import java.util.Scanner;

public class StudentMain {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("------------------------------");
        System.out.println("\t 학생 관리 프로그램\t");
        System.out.println("------------------------------");
        System.out.println("\t 다음 메뉴에서 선택\t");
        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 num = scan.nextInt();
        scan.nextLine();
        switch (num){
            case 1:
                StudentInsert stdInsert = new StudentInsert();
                stdInsert.studentInsert();
                break;
            case 2:
                StudentSelect stdSelect = new StudentSelect();
                stdSelect.studentSelect();
                break;
            default:
                break;

        }

    }
}