발자취
#15 JDBC 실습 본문
#01 JDBC
- 자바에서 DBMS에 접속하기 위한 API(패키지)
1. JDBC 프로그램 구조
- 빌더 패턴
DriverManager -> Connection -> Statement (-> ResultSet)
(1) 드라이버 로딩 - 자바 리플렉션(Reflection)의 다이나믹 클래스 로딩
Class.forName(...);
(2) DB 연결 -> Connection 오브젝트 생성
Connection conn = DriverManager.getConnection(dburl, id, password);
(3) Statement 오브젝트 생성(SQL을 넣어서 실행하는 오브젝트)
Statement stmt = conn.createStatement();
(4) Statement 실행(executeUpdate/executeQuery) 쿼리의 경우 실행결과를 ResultSet으로 받음
ResultSet rs = stmt.executeQuery(“SELECT …”);
(5) ResultSet으로 결과 출력
while (rs.next()) {
String sampleString = rs.getString(1);
int sampleInteger = rs.getInt(2);
}
2. Statement의 종류
- Statement(다이나믹 SQL)
- PreparedStatement(스태틱 SQL): 속도 뻐름, 보안 좋음
#02 JDBC 실습
1. Statement 실습

위와 같은 코드를 sample.jsp 파일에 작성하였습니다.
[3번 라인] “com.mysql.cj.jdbc.Driver”라는 드라이버를 로딩합니다.
[4번 라인] 접근하고자 하는 데이터베이스(=employees)의 주소를 지정합니다.
[5번 라인] 데이터베이스와 연결하여 Connection 오브젝트를 생성합니다.
[7번 라인] Statement 오브젝트를 생성합니다.
[8~9번 라인] 쿼리의 실행 결과를 ResultSet으로 선언한 변수인 rs에 저장합니다.
[11~12번 라인] ‘first_name’과 ‘last_name의 값을 출력합니다.

서버를 실행한 뒤 http://localhost:8090/sample.jsp의 내용을 확인한 결과, employees DB의 employees 테이블의 ‘first_name’과 ‘last_name’가 상위 10개 출력된 것을 확인할 수 있습니다.

cmd에서 확인한 바와 일치하는 것을 확인할 수 있습니다.
2. PreparedStatement 실습 (jsp 변환)

강의자료에 주어진 자바 코드를 jsp 형식으로 변경하여 작성하였습니다.
(emp_no가 1인 레코드가 이미 존재하여 3으로 변경했습니다.)
4번째 줄에 작성한 SQL 문에 있는 ‘?’ 자리에 9번 라인에 적은 3, “Ha”, “Seokjae”를 차례로 대입한 뒤 해당 SQL 문을 실행하는 코드입니다.
emp_no가 3이고, last_name이 “Ha”, first_name이 “Seokjae”인 레코드를 삽입합니다.

서버를 실행해보면 ‘Record Insert!’라는 값이 출력된 것을 확인할 수 있습니다.

cmd 창에서 레코드를 조회해보면, 삽입한 레코드가 정상적으로 추가된 것을 확인할 수 있습니다.

위에서 작성한 sample.jsp를 통해서도 레코드가 추가된 것을 확인할 수 있습니다.
3. PreparedStatement 실습 (java)

주어진 자바 코드를 preparedStatementSample.java라는 파일에 작성했습니다.

해당 코드를 실행하면 이클립스 콘솔창에 ‘Record Insert!’라는 문장이 출력됩니다.

cmd 창에서 레코드를 조회해보면, 삽입한 레코드가 정상적으로 추가된 것을 확인할 수 있습니다.

sample.jsp를 통해서도 레코드가 추가된 것을 확인할 수 있습니다.
'3-1 > 데이터베이스' 카테고리의 다른 글
| #14 비정형 데이터 (전문검색) (0) | 2023.08.12 |
|---|---|
| #13 반정형데이터 (NoSQL, JSON) (0) | 2023.08.12 |
| #12 역정규화, DML 실습 4 (0) | 2023.08.12 |
| #11 모델링2 (테이블 최적화, 정규형), 서브쿼리 (0) | 2023.08.12 |
| #10 DML 실습 3 (Group by, having, charset/collation) (0) | 2023.08.12 |