관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터베이스와 JDBC 3 - JDBC를 이용한 데이터 조작하기 3 : member 테이블 내용 출력 코드 오류 수정하기 본문

웹 · 앱 개발/JSP & Servlet

데이터베이스와 JDBC 3 - JDBC를 이용한 데이터 조작하기 3 : member 테이블 내용 출력 코드 오류 수정하기

huenuri 2024. 12. 15. 10:39

조금 전에 아무리 해도 되지 않았던 코드가 몇 시간 만에 해결되었다. 개발자는 항상 이런 어려움과 싸워야 한다. 정말 이번에는 너무나 되지 않아서 포기하고 싶었지만 그래도 한번 더 보자자며 마지막으로 실행해 본 방법이 잘 먹혔다. 이제 그 해결 방법을 기록으로 남겨볼 것이다.


 

 

 

 

member 테이블의 내용 출력하기 실습 프로젝트

 

코드 수정하기


 

 

코드 실행하기

 

하지만 데이터가 없다고 나온다. 혹시 커밋을 하지 않아서 이런 문제가 생기나 해서 오라클에서 다음의 코드를 실행했다.

 


 

 

 

코드 다시 실행하기

 

이제 데이터가 제대로 나왔다. 문제는 커밋을 하지 않아서였다. 이번 시행착오를 통해 커밋을 하는 것이 얼마나 중요한 확실히 알게 되었다.

 

그럼 이 코드를 분석해보겠다.


 

 

 

코드 분석하기

 

1. 선언부 (데이터베이스 연결 정보와 SQL 쿼리 정의)

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String id = "SCOTT";
String pass = "tiger";
String sql = "SELECT * FROM member";

 

  • Connection, Statement, ResultSet : 데이터베이스 연결, SQL 실행, 결과 저장에 필요한 객체를 선언
  • url, id, pass : 오라클 데이터베이스 연결 정보
  • sql : 실행할 SQL 쿼리(여기서는 member 테이블의 모든 레코드를 조회)

 

 

2. 데이터베이스 연결

Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, id, pass);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);

 

  • Class.forName() : 오라클 JDBC 드라이버를 메모리에 로드
  • DriverManager.getConnection() : 데이터베이스와 연결
  • createStatement() : SQL 실행을 위한 Statement 객체 생성
  • executeQuery() : SQL 쿼리를 실행하고 결과를 ResultSet에 저장

 

 

3. 데이터가 없는 경우 처리

 

  • rs.isBeforeFirst() : ResultSet에 조회된 데이터가 있는지 확인
  • 데이터가 없으면 <p>데이터가 없습니다.</p> 메시지를 출력

 

 

4. HTML 테이블 출력

 

  • <table> : 조회된 데이터를 HTML 테이블 형식으로 출력
  • while (rs.next())
    • ResultSet의 각 행을 순회하며 데이터를 가져옴
    • rs.getString("컬럼명") : 해당 컬럼의 문자열 데이터를 가져옴
    • rs.getInt("컬럼명") : 숫자 데이터를 가져옴
  • 출력 필드
    • name, userid, pwd, email, phone, admin

 

 

 

5. 예외 처리

} catch (Exception e) {
    out.println("<p>오류 발생: " + e.getMessage() + "</p>");
    e.printStackTrace();
}

 

  • try-catch
    • 데이터베이스 연결 및 SQL 실행 중 오류 발생 시 예외를 출력
    • 오류 메시지를 JSP 페이지에 표시

 

 

 

6. 리소스 해제

finally {
    if (rs != null) rs.close();
    if (stmt != null) stmt.close();
    if (conn != null) conn.close();
}

 

  • finally 블록
    • 데이터베이스와의 연결 및 사용한 객체(ResultSet, Statement, Connection)를 닫아 리소스를 반환

 

 

 

 

 

지금까지 학습한 내용을 그림으로 도식화하면 다음과 같다.

 


 

 

 

 

학습을 마치고

정말 불가능할 것 같은 코드를 완성할 수 있어서 정말 기뻤다. 이 맛에 개발을 하는 것 같다. 사실 JDBC 프로젝트가 많이 어려워서 나머지 JSP 공부는 그냥 건너뛰려고 했는데 그럴 수 없을 것 같다.

그래도 하는 데까지 열심히 해봐야지.