발자취

#15 JDBC 실습 본문

3-1/데이터베이스

#15 JDBC 실습

해린 2023. 8. 12. 04:45

#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를 통해서도 레코드가 추가된 것을 확인할 수 있습니다.