교수님이 쓰라고 하셔서 쓰는 그런데 은근 재밌는 듯

JAVA

[JAVA] DB

shinyunha 2025. 11. 16. 00:30

데이터베이스

공용 데이터들의 집합

 

DBMS(DataBase Management System)

eg) Oracle, MS SQL Server, MySQL(무료), MariaDB(우리가 쓰는 거)

관계형 DBMS - RDB

key와 value들의 관계를 table로 표현

객체 지향 데이터베이스

정보를 객체 형태로 표현

NoSQL, NewSQL DBMS

비정형 데이터 처리


관계형 데이터베이스

Attribute(속성): column(열)에 표현, key

Tuple: row(행)에 표현, value

Domain: 하나의 속성이 가질 수 있는 값의 범위 또는 데이터타입

 

SQL(Structured Query Language)

관계형 데이터베이스 관리 시스템용 언어

 

+ 콘솔에서 SQL을 직접 쳐서 관리하면 복잡하고 어려워서 HeidiSQL 같은 프로그램을 이용한다 


CRUD 

Create: 생성

Read: 조회

Update: 수정

Delete: 삭제


JDBC(Java Database Connetivity)

자바에서 데이터베이스를 연결하고 SQL문을 실행할 수 있도록 제공되는 표준 API

JDBC 드라이버만 교체하면 다양한 종류의 데이터베이스와 통신 가능

 

1. JDBC 드라이버 로드

String url = "jdbc:mysql://192.168.0.13:3306/java2_3"; //서버주소:포트번호/DB이름
String username = "stdUser";
String password = "wkvmtlf2";

 

2. 데이터베이스 연결

//try with resource문 - 괄호 안 정리 알아서 해줌 
try (Connection conn = DriverManager.getConnection(url, username, password)){
    System.out.println("DB연결 성공");
} catch (SQLException e) {
    e.printStackTrace();
}

 

3. SQL문 실행 및 결과처리 

//조회하기
String selectSql = "select * from student"; //student table에서 조회하겠다
			
Statement stmt = conn.createStatement(); //정적 SQL문
ResultSet rs = stmt.executeQuery(selectSql); //조회할 때 사용 
			
while (rs.next()) { //다 조회해야하니 while
    //table에 만들어둔 이름이랑 같아야함
    int no = rs.getInt("no");
    String major = rs.getString("dept");
    String stdID = rs.getString("stdID");
    String name = rs.getString("name");
    String review = rs.getString("review");
				
    System.out.printf("No: %d | 학과: %s | 이름: %s | 리뷰: %s\n", no, major, name, review);
}
//생성하기
String insertSql = "INSERT INTO student (no, dept, stdID, name, review) VALUES (?,?,?,?,?)";
			
PreparedStatement pstmt = conn.prepareStatement(insertSql); //성능과 보안 좋음
pstmt.setInt(1, 0);
pstmt.setString(2, "컴퓨터공학과");
pstmt.setString(3, "2476154");
pstmt.setString(4, "신윤하");
pstmt.setString(5, "신기해요");
pstmt.executeUpdate(); //실행 잊지마
			
System.out.println("쓰기 성공");
//수정하기
String UpdateSQL = "UPDATE student SET name = ? WHERE stdID = ?";

try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
    pstmt.setString(1, newName); //새 이름
    pstmt.setString(2, stdID); //수정할 학생의 학번
    int rows = pstmt.executeUpdate();
    if (rows > 0) {
        System.out.println("학생 정보가 수정되었습니다.");
    } else {
        System.out.println("해당 학번의 학생이 없습니다.");
    }
} catch (SQLException e) {
    System.err.println("학생 정보 수정 실패: " + e.getMessage());
}
//삭제하기
String deleteSQL = "DELETE FROM student WHERE stdID = ?";

try (PreparedStatement pstmt = conn.prepareStatement(deleteSQL)) {
    pstmt.setString(1, stdID); //삭제할 학생 학번
    int rows = pstmt.executeUpdate();
    if (rows > 0) {
        System.out.println("학생 정보가 삭제되었습니다.");
    } else {
        System.out.println("해당 학번의 학생이 없습니다.");
    }
} catch (SQLException e) {
    System.err.println("학생 삭제 실패: " + e.getMessage());
}

 

4. 자원해제

try-with-resources문이 해줌


MVC + DAO + JDBC

DAO Interface 사용자가 수행할 수 있는 CRUD 작업 규칙 정의 
DAO JDBC 관련 로직 구현
Service 비즈니스(사용자 관련기능) 로직 구현
Model (DTO) 데이터
View 사용자 입출력 처리
DB 커넥터 DB 연결만 관리
Controller 전체 흐름 관리

'JAVA' 카테고리의 다른 글

[마피아] Join Sequence  (0) 2025.11.21
[JAVA] Spring Boot - 1  (0) 2025.11.18
[JAVA] Network & Socket  (0) 2025.11.04
[JAVA] GUI & Thread - 알낳기  (0) 2025.10.31
[JAVA] 중간고사 대비  (0) 2025.10.19