- [Java] 125. JDBC 실습 : 학생 정보 관리 시스템 만들기2024년 06월 17일
- Song hyun
- 작성자
- 2024.06.17.:02
728x90반응형[Java] 125. JDBC 실습 : 학생 정보 관리 시스템 만들기
💡 학습 목표💡
JDBC를 사용하여 학생 관리 시스템을 구축해 보자.
학생의 정보를 데이터베이스에 저장하고 관리하는 간단한 시스템을 구축합니다.학생 정보를 추가, 조회, 수정, 삭제할 수 있는 기능을 구현합니다.- 기능 요구사항
- 학생 정보 추가
- 학생 정보 조회
- 학생 정보 수정
- 학생 정보 삭제
- 비기능 요구사항
- 사용자 친화적인 콘솔 인터페이스 제공
- 적절한 예외 처리 및 로그 기록
- 데이터베이스 연결 풀 사용(HikariCP)
1. 데이터베이스 설계 및 테이블 생성
-테이블
-컬럼create database studentdb; CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, age INT NOT NULL, email VARCHAR(100) NOT NULL UNIQUE );
2. 클래스 설계 (자유롭게 설계)package ver1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import org.w3c.dom.UserDataHandler; public class MainTest { private static final Logger LOGGER = Logger.getLogger(MainTest.class.getName()); public static void main(String[] args) { try { Connection conn = StudentDBConnection.getConnection(); Class.forName("com.mysql.cj.jdbc.Driver"); Scanner scanner= new Scanner(System.in); while(true) { printMenu(scanner); int choice=scanner.nextInt(); if(choice==1) { addStudentInfo(conn,scanner); } else if(choice==2) { selectStudentInfo(conn,scanner); } else if (choice==3) { updateStudentInfo(conn,scanner); } else if(choice==4) { deleteStudentInfo(conn,scanner); } else if(choice==0) { System.out.println("시스템이 종료됩니다."); } else { System.out.println(" 잘못된 입력입니다. 다시 입력해주세요. "); } } } catch (Exception e) { LOGGER.log(Level.INFO,"MySQL 연결 오류"); e.printStackTrace(); } } private static void printMenu(Scanner scanner) { 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(" 시스템 종료 : 0 "); System.out.print(" 선택할 메뉴 : "); } private static void deleteStudentInfo(Connection connection,Scanner scanner) { System.out.print("삭제할 학생의 이름을 입력하세요 : "); scanner.nextLine(); String name=scanner.nextLine(); String deleteQuery="DELETE FROM students where name=?"; try (PreparedStatement pstmt=connection.prepareStatement(deleteQuery)){ pstmt.setString(1,name); pstmt.executeUpdate(); System.out.println("삭제가 완료되었습니다."); } catch (Exception e) { e.printStackTrace(); } } private static void updateStudentInfo(Connection connection,Scanner scanner) { System.out.print(" 수정할 학생의 이름 : "); scanner.nextLine(); String name=scanner.nextLine(); System.out.println(" 바꿀 이름 : "); String changeName=scanner.nextLine(); String deleteQuery="UPDATE students set name = ? where name = ?"; try (PreparedStatement pstmt=connection.prepareStatement(deleteQuery)){ pstmt.setString(1,changeName); pstmt.setString(2,name); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } } private static void selectStudentInfo(Connection connection,Scanner scanner) { System.out.println(" 조회할 학생의 이름 : "); String selectName=scanner.nextLine(); scanner.nextLine(); String selectQuery=" SELECT * FROM students where name = ? "; try (PreparedStatement pstmt=connection.prepareStatement(selectQuery)){ pstmt.setString(1, selectName); ResultSet resultSet=pstmt.executeQuery(); resultSet.next(); if(resultSet.equals(selectName)) { System.out.println("학생 ID : "+resultSet.getInt("id")); System.out.println("이름 : "+resultSet.getString("name")); System.out.println("나이 : "+resultSet.getInt("age")); System.out.println("이메일 : "+resultSet.getString("email")); } else { System.out.println("찾으려는 학생이 존재하지 않습니다."); } } catch (SQLException e) { e.printStackTrace(); } } private static void addStudentInfo(Connection connection,Scanner scanner) { System.out.println("학생 정보를 추가합니다."); System.out.println("--------------------"); System.out.print("추가할 학생의 이름 : "); String addName=scanner.nextLine(); scanner.nextLine(); System.out.println("추가할 학생의 나이 : "); int addAge=scanner.nextInt(); scanner.nextLine(); System.out.println("추가할 학생의 이메일 : "); String addEmail=scanner.nextLine(); String addQuery="INSERT INTO students(name,age,email) values(?,?,?)"; try (Connection connection2=StudentDBConnection.getConnection()){ PreparedStatement pstmt=connection.prepareStatement(addQuery); pstmt.setString(1, addName); pstmt.setInt(2, addAge); pstmt.setString(3, addEmail); pstmt.executeUpdate(); System.out.println("학생 정보 추가가 완료되었습니다."); } catch (Exception e) { e.printStackTrace(); } } }
package ver1; import java.sql.Connection; import java.sql.SQLException; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; public class StudentDBConnection { private static HikariDataSource datasSource; private static final String URL="jdbc:mysql://localhost:3306/studentdb?serverTimezone=Asia/Seoul"; private static final String USER="root"; private static final String PASSWORD="asd123"; static { HikariConfig config=new HikariConfig(); config.setJdbcUrl(URL); config.setUsername(USER); config.setPassword(PASSWORD); config.setMaximumPoolSize(10); datasSource=new HikariDataSource(config); } public static Connection getConnection() throws SQLException{ System.out.println("HikariCP를 사용한 Data Source"); return datasSource.getConnection(); } }
728x90반응형'Java > 네트워크 통신' 카테고리의 다른 글
[Java] 126. 연습 : JDBC-HikariCP를 사용해 코드 작성하기 (0) 2024.06.18 [Java] 124. JDBC에서의 예외 처리 (0) 2024.06.17 [Java] 123. HikariCP 라이브러리를 프로젝트에 추가하기 (0) 2024.06.17 [Java] 122. JDBC 성능 최적화 (0) 2024.06.17 [Java] 121. JDBC를 활용한 CRUD와 SOLID 원칙 (2) (0) 2024.06.14 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)