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 |