본문 바로가기
Java/네트워크 통신

[Java] 125. JDBC 실습 : 학생 정보 관리 시스템 만들기

글: Song hyun 2024. 6. 17.
728x90
반응형

[Java] 125. JDBC 실습 : 학생 정보 관리 시스템 만들기


💡 학습 목표💡 
JDBC를 사용하여 학생 관리 시스템을 구축해 보자.
학생의 정보를 데이터베이스에 저장하고 관리하는 간단한 시스템을 구축합니다.학생 정보를 추가, 조회, 수정, 삭제할 수 있는 기능을 구현합니다. 
  1. 기능 요구사항
    • 학생 정보 추가
    • 학생 정보 조회
    • 학생 정보 수정
    • 학생 정보 삭제
  2. 비기능 요구사항
    • 사용자 친화적인 콘솔 인터페이스 제공
    • 적절한 예외 처리 및 로그 기록
    • 데이터베이스 연결 풀 사용(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
반응형