Java Swing을 이용한 JDBC 인사 관리 프로젝트

Soozoo·2024년 7월 15일

JAVA

목록 보기
41/41
  • Java Swing을 이용한 JDBC 인사 관리 프로젝트

    1. 프로그램 개요

    이 프로그램은 GUI를 통해 사용자에게 입력을 받고, 데이터베이스와 연동하여 입력된 데이터를 관리합니다. 각 버튼은 특정 기능을 수행하며, 데이터베이스와의 연동은 JDBC를 사용하여 이루어집니다.

    2. 프로그램 구성 요소

    • JFrame: Swing의 JFrame 클래스를 확장하여 GUI 창을 구성합니다.

    • JPanel: Swing의 JPanel 클래스를 사용하여 여러 컴포넌트를 그룹화하고 배치합니다.

    • JTextField: 사용자 입력을 받는 텍스트 필드입니다.

    • JButton: 사용자가 클릭하여 이벤트를 발생시키는 버튼입니다.

    • JTable: 데이터베이스의 정보를 표시하는 테이블입니다.

    • DefaultTableModel: JTable에 데이터를 제공하는 모델 클래스입니다.

    • PreparedStatement: SQL 문을 실행하기 위한 준비된 문(statement) 객체입니다.

    • ConnectionHelper: 데이터베이스 연결을 도와주는 클래스로, JDBC 드라이버 로드 및 Connection 객체를 제공합니다.

      3. 기능 설명

    • 추가 (Add): 고객 정보를 입력받아 데이터베이스에 추가합니다.

    • 삭제 (Delete): 고객 번호를 입력받아 해당 고객 정보를 데이터베이스에서 삭제합니다.

    • 검색 (Search): 고객 이름을 입력받아 해당하는 고객 정보를 데이터베이스에서 검색하여 테이블에 표시합니다.

    • 수정 (Update): 고객 번호를 입력받아 해당 고객 정보를 수정합니다.

    • 전체 보기 (Total): 데이터베이스에 저장된 모든 고객 정보를 테이블에 표시합니다.

    • 초기화 (Init): 입력 필드를 초기화하여 다음 작업을 준비합니다.

      4. 코드 설명

      아래는 프로그램에서 사용된 주요 코드입니다.

      import java.sql.*;
      import javax.swing.*;
      import javax.swing.table.DefaultTableModel;
      import ex01.jdbc.ConnectionHelper;
      
      public class JDBCProjectEx3 extends JFrame {
          // 컴포넌트 및 변수 선언
          JPanel panWest, panSouth;
          JTextField txtNo, txtName, txtEmail, txtPhone;
          JButton btnTotal, btnAdd, btnDel, btnSearch, btnCancel, btnUpdate;
          JTable table;
          MyModel model;
          int cmd = NONE;
      
          // SQL 쿼리 정의
          private String sqlInsert = "INSERT INTO CUSTOMER VALUES (?, ?, ?, ?)";
          private String sqlDelete = "DELETE FROM CUSTOMER WHERE CODE = ?";
          private String sqlSelect = "SELECT * FROM CUSTOMER";
          private String sqlSearch = "SELECT * FROM CUSTOMER WHERE NAME = ?";
          private String sqlUpdate = "UPDATE CUSTOMER SET NAME = ?, EMAIL = ?, PHONE = ? WHERE CODE = ?";
      
          // 데이터베이스 관련 객체 선언
          Connection conn;
          PreparedStatement pstmtInsert, pstmtDelete, pstmtUpdate;
          PreparedStatement pstmtSelect, pstmtSelectScroll;
          PreparedStatement pstmtSearch, pstmtSearchScroll;
      
          public JDBCProjectEx3() {
              // GUI 컴포넌트 초기화 및 배치
              // ... 생략 (JPanel, JTextField, JButton 등 초기화)
      
              // 버튼 이벤트 리스너 등록
              btnTotal.addActionListener(this::actionPerformed);
              btnAdd.addActionListener(this::actionPerformed);
              btnDel.addActionListener(this::actionPerformed);
              btnSearch.addActionListener(this::actionPerformed);
              btnCancel.addActionListener(this::actionPerformed);
              btnUpdate.addActionListener(this::actionPerformed);
      
              // 테이블 설정
              add(new JScrollPane(table = new JTable()), "Center");
      
              // 데이터베이스 연결 및 초기 데이터 로드
              dbConnect();
              total();
      
              // 프레임 설정
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setBounds(100, 100, 700, 300);
              setVisible(true);
          }
      
          // 데이터베이스 연결 초기화
          public void dbConnect() {
              try {
                  conn = ConnectionHelper.getConnection("oracle");
      
                  pstmtInsert = conn.prepareStatement(sqlInsert);
                  pstmtDelete = conn.prepareStatement(sqlDelete);
                  pstmtSelect = conn.prepareStatement(sqlSelect);
                  pstmtSearch = conn.prepareStatement(sqlSearch);
                  pstmtUpdate = conn.prepareStatement(sqlUpdate);
      
                  pstmtSelectScroll = conn.prepareStatement(sqlSelect, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                  pstmtSearchScroll = conn.prepareStatement(sqlSearch, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          // 버튼 이벤트 처리 메소드
          public void actionPerformed(ActionEvent e) {
              Object obj = e.getSource();
      
              // 각 버튼에 따른 처리
              if (obj == btnAdd) {
                  // 추가 기능 처리
                  if (cmd != ADD) {
                      setText(ADD);
                      return;
                  }
                  setTitle(e.getActionCommand());
                  add();
      
              } else if (obj == btnDel) {
                  // 삭제 기능 처리
                  if (cmd != DELETE) {
                      setText(DELETE);
                      return;
                  }
                  setTitle(e.getActionCommand());
                  del();
      
              } else if (obj == btnSearch) {
                  // 검색 기능 처리
                  if (cmd != SEARCH) {
                      setText(SEARCH);
                      return;
                  }
                  setTitle(e.getActionCommand());
                  search();
      
              } else if (obj == btnUpdate) {
                  // 수정 기능 처리
                  if (cmd != UPDATE) {
                      setText(UPDATE);
                      return;
                  }
                  setTitle(e.getActionCommand());
                  update();
      
              } else if (obj == btnTotal) {
                  // 전체 보기 기능 처리
                  setTitle(e.getActionCommand());
                  total();
              }
              setText(NONE);
              init();
          }
      
          // 데이터베이스에 고객 정보 추가
          private void add() {
              try {
                  String strNo = txtNo.getText();
                  String strName = txtName.getText();
                  String strMail = txtEmail.getText();
                  String strPhone = txtPhone.getText();
      
                  pstmtInsert.setInt(1, Integer.parseInt(strNo));
                  pstmtInsert.setString(2, strName);
                  pstmtInsert.setString(3, strMail);
                  pstmtInsert.setString(4, strPhone);
                  pstmtInsert.executeUpdate();
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
      
              JOptionPane.showMessageDialog(null, "추가되었습니다.");
          }
      
          // 데이터베이스에서 고객 정보 삭제
          private void del() {
              try {
                  String strNo = txtNo.getText();
                  pstmtDelete.setString(1, strNo);
                  pstmtDelete.executeUpdate();
                  JOptionPane.showMessageDialog(null, "삭제되었습니다.");
                  total();
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          // 데이터베이스에서 고객 정보 검색
          private void search() {
              try {
                  String strName = txtName.getText();
                  pstmtSearchScroll.setString(1, strName);
                  ResultSet rsScroll = pstmtSearchScroll.executeQuery();
                  pstmtSearch.setString(1, strName);
                  ResultSet rs = pstmtSearch.executeQuery();
      
                  if (model == null) model = new MyModel();
                  model.getRowCount(rsScroll);
                  model.setData(rs);
      
                  table.setModel(new DefaultTableModel(model.data, model.columnName));
                  table.updateUI();
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          // 데이터베이스에서 모든 고객 정보 조회
          public void total() {
              try {
                  ResultSet rs = pstmtSelect.executeQuery();
                  ResultSet rsScroll = pstmtSelectScroll.executeQuery();
      
                  if (model == null) model = new MyModel();
      
                  model.getRowCount(rsScroll);
                  model.setData(rs);
      
                  table.setModel(new DefaultTableModel(model.data, model.columnName));
                  table.updateUI();
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          // 입력 필드 초기화
          private void init() {
              txtNo.setText("");
              txtName.setText("");
              txtEmail.setText("");
              txtPhone.setText("");
          }
      
          // 입력 필드 활성화 설정
          private void setText(int command) {
              switch (command) {
                  case ADD:
                      txtNo.setEditable(true);
                      txtName.setEditable(true);
                      txtEmail.setEditable(true);
                      txtPhone.setEditable(true);
                      break;
                  case DELETE:
                      txtNo.setEditable(true);
                      break;
                  case SEARCH:
                      txtName.setEditable(true);
                      break;
                  case UPDATE:
                      txtNo.setEditable(true);
                      break;
              }
      
              setButton(command);
          }
      
          // 버튼 활성화 설정
          private void setButton(int command) {
              btnTotal.setEnabled(false);
              btnAdd.setEnabled(false);
              btnDel.setEnabled(false);
              btnSearch.setEnabled(false);
      
              switch (command) {
                  case ADD:
                      btnAdd.setEnabled(true);
                      cmd = ADD;
                      break;
                  case DELETE:
                      btnDel.setEnabled(true);
                      cmd = DELETE;
                      break;
                  case SEARCH:
                      btnSearch.setEnabled(true);
                      cmd = SEARCH;
                      break;
                  case UPDATE:
                      btnUpdate.setEnabled(true);
                      cmd = UPDATE;
                      break;
                  case TOTAL:
                      btnTotal.setEnabled(true);
                      cmd = TOTAL;
                      break;
                  case NONE:
                      btnTotal.setEnabled(true);
                      btnAdd.setEnabled(true);
                      btnDel.setEnabled(true);
                      btnSearch.setEnabled(true);
                      btnCancel.setEnabled(true);
                      btnUpdate.setEnabled(true);
                      cmd = NONE;
                      break;
              }
          }
      
          // 메인 메소드: 프로그램 실행
          public static void main(String[] args) {
              new JDBCProjectEx3();
          }
      }
      

      5. 실행 및 사용 방법

    • 프로그램을 실행하면 GUI 창이 표시됩니다.

    • 각 버튼을 클릭하여 고객 정보를 추가, 삭제, 검색, 수정할 수 있습니다.

    • 테이블에는 데이터베이스에 저장된 고객 정보가 표시됩니다.

      이 프로그램을 통해 Java Swing을 사용하여 JDBC와 데이터베이스를 연동하는 기본적인 방법을 익힐 수 있습니다.

      6.실행 예시

      6.1 사용자 추가

6.2 사용자 삭제

6.3 사용자 수정

profile
넙-죽

0개의 댓글