JAVA2) #9 DB & JDBC

지우·2026년 1월 9일

java2

목록 보기
11/15

관계형 데이터베이스

테이블 형태로 구성 (릴레이션)

  • 속성 : 릴레이션의 열 (필드)
  • 투플 : 릴레이션의 행 (레코드)
  • 도메인 : 하나의 속성이 가질 수 있는 모든 값의 범위 또는 데이터타입

SQL : 관계형 데이터베이스 관리 시스템에서 사용하는 쿼리용 언어
JDBC : 관계형 데이터베이스에 저장된 데이터를 접근, 조작할 수 있게 하는 API

HeidiSQL

세션관리자 ) 파일 탭에 있음 / 사용자와 암호, 포트 잘 확인하기!!
사용자관리자 ) 도구 탭에 있음 / 사용자 이름과 권한 설정

테이블 만들기 ) 키 선택

  • 기본키(Primary Key/노란색) : 중복 불가, NULL 불가, 테이블 당 하나만 가능, 고유성 보장 => 절대 중복되거나 비어 있으면 안됨
  • 고유키(Unique Key/빨간색) : 중복 불가, NULL 하나만 허용, 테이블 당 여러개 가능, 고유성 보장 => 꼭 있어야하진 않지만 중복되면 안됨
  • 일반 인덱스(Normal Index/초록색)

CRUD

Create / Read / Update / Delete
데이터 생성, 조회, 수정, 삭제 등 전체 흐름을 다루는 프로그램 만들기

DB 연결/조회/추가 해보기

DB와 이클립스 연동하기

프로젝트 생성 -> Build Path -> Configure Build Path -> Libraries -> ClassPath -> Add External JARs -> jar 파일 선택

JDBC 프로그래밍 핵심 5단계

  1. JDBC 드라이버 로드
    jar 파일이 classpath에 포함되어 있다면 생략 가능

  2. 데이터베이스 연결 (Conncetion)
    DriverManager 통해 실제 데이터베이스와 연결

conn = DriverManager.getConnection(url, user, password);
  1. SQL문 실행 (Statement/PreparedStatement)
    주로 성능과 보안 때문에 PreparedStatement 사용 권장
String sql = "INSERT INTO user (no, id, name, dept) VALUES (?, ?, ?, ?)"; 
//?을 이용한 값 바인딩으로 SQL 인젝션 공격 방어
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1);
pstmt.setString(2, "12345");
pstmt.setString(3, "짱구");
pstmt.setString(4, "컴퓨터공학과");
pstmt.executeUpdate();
  1. 결과처리 (Result Set)

  2. 자원 해제 (Close)
    자원이 자동 해제되는 try-with-resources 사용 권장
    try() 괄호 안에 선언된 리소스는 자동으로 close( ) 가 호출되고, 예외가 발생되더라도 finally 없이 자원 정리 가능
    -> 코드가 깔끔하고 오류 처리도 쉬움

연결 코드 작성하기 1

연결 코드 작성하기 2

Service와 DB를 나누어서 코드 작성해보기

StudentService

DBManager

StudentService에 각각에 기능에 대한 코드를 차근히 적어나가다보니 크게 어렵지 않았다. try-catch를 사용해야할 부분과 사용하지 않아도 될 부분을 구분하는게 아직 서툴렀다. sql에 관한 코드들은 반복해서 사용하다보니 점점 적응이 되었다
확실히 Service와 DB를 구분하여 작성하니까 보기도 편하고 기능이 나누어져 있어 수정 및 관리하기도 편했다

연결 코드 작성하기 3

SOLID 원칙 지켜서 클래스 분할하기!

<역할>
View - 입력/출력만! : 학번/이름/학과 입력 받기
Controller - 흐름 제어 / Service 호출 : 메뉴 선택 기능!!!
Service - 로직 처리 : 검증, 조건 분기 등등
DAO - DB 작업 수행 : SQL 실행

분할 중에 자꾸 오류 발생함。。
아직 예외 처리를 확실하게 못하는 것 같고 스스로 클래스 분할하는 것에 미흡한 것 같다. SOLID 원칙 확실하게 생각해보면서 위에 작성하기 2를 바탕으로 작성하기 3 더 생각하고 실습해보기

0개의 댓글