Don't Panic
in JSP·Servlet ☕ 5분 읽기

[JSP·Servlet] JDBC — SQL 기초부터 Java 연동까지

목차

SQL (Structured Query Language)

  • 데이터베이스에 있는 정보를 사용할 수 있도록 지원하는 언어
  • 모든 DBMS에서 사용 가능
  • 대소문자를 구분하지 않음

SQL 개요 화면


테이블(Table)

테이블 생성

회원 정보를 저장하는 member 테이블을 생성해보자.

  • 스키마(Schema): 데이터베이스 테이블에 저장될 데이터의 구조와 형식을 정의

테이블 생성 스키마 예시

ER Diagram (ERD)

  • 개체 타입과 관계 타입을 기본 개념으로 현실 세계를 개념적으로 표현하는 방법

ERD 다이어그램

스키마로 테이블 생성 SQL

스키마를 참조해 테이블을 생성하는 SQL 작성

CREATE TABLE SQL


DML (Data Manipulation Language)

INSERT

INSERT 기본 문법

INSERT 실행 예시 1

INSERT 실행 예시 2

UPDATE

UPDATE 기본 문법

UPDATE 실행 예시

DELETE

DELETE 기본 문법

DELETE 실행 예시

SELECT

기본 SELECT 문법

SELECT 기본 문법

SELECT 실행 예시 1

SELECT 실행 예시 2

SELECT 실행 예시 3

SELECT 실행 예시 4


JDBC (Java Database Connectivity)

JDBC란?

  • 자바 프로그래밍 언어로 만들어진 클래스와 인터페이스로 이루어진 API로서 ANSI SQL(1999)을 지원
  • SQL 문을 실행할 수 있는 함수 호출 인터페이스

JDBC 특징

  • DBMS 종류에 독립적인 자바 프로그래밍 가능
  • 데이터베이스가 달라져도 동일한 API 사용 (드라이버 및 URL만 수정하면 가능)
  • 자바의 플랫폼 독립성 + DBMS 독립성의 조합

JDBC 기능

  • 데이터베이스에 연결 설정
  • SQL 문장을 DBMS에 전송
  • SQL 문장 전송 후 결과 처리

JDBC 인터페이스 구조

  • Database 업체에게 제공되는 인터페이스 → 각 DBMS 업체가 구현
  • 프로그래머에게 제공되는 인터페이스

JDBC API: java.sql 패키지

Connection (interface)

  • 데이터베이스에 대한 하나의 세션을 표현
  • 세션: 클라이언트가 서버에 요청하기 위해 연결을 맺은 상태
  • DriverManager.getConnection() 메서드로 획득
  • 기본값: setAutoCommit(true)
  • 트랜잭션 처리 시 setAutoCommit(false) 설정 후 명시적으로 commit() 호출

Statement (interface)

SQL 문장을 실행하고 결과를 가져오기 위해 사용

메서드설명
execute(String sql)DML·Query·DDL 모두 실행 가능. ResultSet이면 true, DML이면 false 반환
executeQuery(String sql)SELECT 전용. ResultSet 반환
executeUpdate(String sql)DML 전용. 영향받은 행 수(int) 반환

PreparedStatement (interface)

  • 동일한 SQL 문장이 여러 번 반복 실행될 때 사용
  • 대용량 문자·바이너리 데이터 저장에도 활용
  • SQL 문장이 미리 컴파일되어 객체에 저장됨
  • 반복 실행 시 clearParameters()로 이전 값 초기화

CallableStatement (interface)

  • 실제 SQL이 아닌 Stored Procedure를 호출
  • Stored Procedure: 연속 SQL을 DB에 저장해두고 함수처럼 호출
  • 사용 시 속도 향상 기대 가능, 자바 코드에 SQL이 들어가지 않아 SQL 독립성 확보

ResultSet (interface)

  • 쿼리 결과값을 처리
  • 커서는 처음 레코드 바로 이전을 가리킴
  • next(): 커서를 다음 행으로 이동
  • getXXX(index or name): 데이터 획득 (getString, getInt, …)

JDBC 프로그래밍 개발 순서

  1. JDBC 드라이버 로딩
  2. DBMS와 연결 (Connection 생성)
  3. SQL 실행 준비 (Statement / PreparedStatement 생성)
  4. SQL 실행
    • DML: INSERT / UPDATE / DELETE
    • Query: SELECT
  5. DBMS 연결 끊기

1. JDBC 드라이버 로딩

  • 데이터베이스 접속을 열기 위해 JVM 안으로 특정 드라이버 클래스를 적재
  • Class.forName(driverClassName);

드라이버 로딩 코드 예시


2. DBMS 연결 (Connection 생성)

  • DriverManager 클래스로 URL 형태의 DB에 접속 요청
  • Connection con = DriverManager.getConnection(URL, dbid, dbpassword);
  • JDBC URL: 드라이버 고유 방식으로 개별 데이터베이스를 식별

Connection 생성 코드 예시


3. SQL 실행 준비

String sql = "insert/update/delete/select ...";

// Statement 생성
Statement stmt = conn.createStatement();

// PreparedStatement 생성
PreparedStatement pstmt = conn.prepareStatement(sql);

4. SQL 실행

// Statement - DML
int cnt = stmt.executeUpdate(sql);
// Statement - SELECT
ResultSet rs = stmt.executeQuery(sql);

// PreparedStatement - 치환변수 값 설정
pstmt.setXXX(index, val);
// PreparedStatement - DML
int cnt = pstmt.executeUpdate();
// PreparedStatement - SELECT
ResultSet rs = pstmt.executeQuery();

SQL 실행 코드 예시


5. DBMS 연결 끊기

  • 모든 작업 완료 후 ResultSetStatement(PreparedStatement)Connection 순서로 close() 호출 (연결한 역순으로 종료)
  • Connection은 상당한 Overhead를 가져오므로, 반드시 close() 해야 최적 상태 유지

연결 종료 코드 예시


관계형 데이터베이스

  • 2차원 배열 형태의 **표(Table)**에 데이터를 저장하는 구조

Event stopPropagation

stopPropagation 개념


Ajax 보충

Ajax는 최근 웹페이지의 50% 이상에서 사용된다. 예전에는 폼 전송 방식이 주였지만, 요즘 웹은 하나의 페이지에 머물면서 동작하는 방식이 대부분이다(결제 화면이 대표적).

DOM으로 읽어들여서 탐색한다. 앞에 $가 붙은 것은 jQuery 객체, 꺽쇠(<>)로 되어 있으면 DOM 객체이다.

jQuery 객체 확인

DOM 객체 확인

each 반복문에서 특정 조건에 벗어나는 처리도 중요하다.

function(idx, item) {
    if (item.id === id && item.pass === pass) {
        // 로그인 성공
        console.log("로그인 성공" + item.name); // 첫 번째에서 성공하면 종료
        return; // 콜백을 리턴 → 반복문 자체를 빠져나오려면 false 반환 필요
    } else {}
}
/* type:"",
   data:"", */

return은 콜백만 리턴한다. 반복문 자체를 벗어나려면 return false를 사용해야 한다. Promise 패턴과 콜백 헬(Callback Hell)은 이후 학습에서 다룬다.