JDBC 연결

ColinSong·2020년 11월 16일
0

jdbc

목록 보기
4/4
post-thumbnail

3.2. 테스트코드

  package jdbc-example;
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  
  
  public class Application {
    public static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:XE";
    public static final String JDBC_USER = "system";
    public static final String JDBC_PW = "oracle";

      public static void main(String[] args) throws ClassNotFoundException {
          System.out.println("test");
          Class.forName("oracle.jdbc.driver.OracleDriver");
          try (final Connection conn = 
                  DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PW)) {			
              final PreparedStatement pstmt = 
              conn.prepareStatement("SELECT length('abcdbc') FROM dual");
              
              final ResultSet rs = pstmt.executeQuery();
              rs.next();
              System.out.println(rs.getInt(1));
              
              rs.close();
              pstmt.close();
              conn.close();
          } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  }

4. JDBC 코드 구현 흐름

코드 흐름은 크게 다음과 같다.

  1. JDBC Driver 로드
  2. 데이터베이스 연결
  3. 데이터베이스 작업
  4. 연결 종료

4.1. JDBC Driver 로드

Class.forName("oracle.jdbc.driver.OracleDriver");

이렇게 하면 JVM에 클래스를 로드해줄 수 있다.

4.2. 데이터베이스에 연결

JDBC url 형식을 보자.

jdbc:oracle:thin:[호스트이름]:[포트]:[db이름]

앞선 코드에선 다음과 같이 작성하였다.

jdbc:oracle:thin:@localhost:1521:XE

커넥션 객체를 얻기 위한 코드는 다음과 같다.

final Connection conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@localhost:1521:XE", //JDBC_USER
    "id", //JDBC_USER
    "password" //JDBC_PW
);

4.3. 데이터베이스 작업

데이터베이스 작업을 하기 위해서는 다음 것들 중 하나가 필요하다.

  • Statement
  • PreparedStatement

얻는 방법은 다음과 같다.

// statement
final Statement stmt = conn.createStatement();
stmt.executeQuery("SELECT 1 FORM dual");
// preparedstatement
final PreparedStatement pstmt = conn.prepareStatement("SELECT length('abcdbc') FROM dual");
pstmt.executeQuery();

쿼리를 수행하기 위한 메소드는 다음과 같다.

메소드 이름반환 타입설명
executeQueryResultSet: 쿼리 결과 객체SELECT(DQL)를 실행한다.
executeUpdateint: 영향 받은 row 개수DML을 실행한다.

4.4. 연결 끊기

앞서 얻었던 커넥션을 사용해 연결을 닫는다.

conn.close();

5. JDBC 객체

대표적으로 사용하는 객체들

  • DriverManager
  • Connection
  • Statement vs PreparedStatement
  • ResultSet

5.1. DriverManager

  • JDBC 드라이버 셋을 관리를 위한 기본 서비스 모듈.
  • 벤더들이 제공한 적절한 드라이버를 찾아서 JDBC를 초기화 하는 역할을 수행한다.

5.2. Connection

  • 특정 DB에 대한 커넥션(세션)을 표현한다. 커넥션 컨텍스트 내에서 SQL 문이 실행되고 결과가 반환된다.
  • 커넥션이 있어야 SQL 문 실행이 가능하다.

5.3. Statement vs PreparedStatement

SQL을 실행하기 위해선 크게 다음 세 가지 절차가 필요하다.

  1. 쿼리 분석
  2. 컴파일
  3. 실행
  • Statement와 PreparedStatement의 차이는 바로 캐시에 있다.
  • PreparedStatement는 단어에서 유추할 수 있듯 캐싱을 해둔다.
메소드 이름반환 타입설명
executeQueryResultSet: 쿼리 결과 객체DQL를 실행한다.
executeUpdateint: affected row(영향 받은 행) 개수DML을 실행한다.

5.4. ResultSet

DQL 수행 결과(executeQuery)를 담는 객체. 최초 반환 시 커서는 BOF에 위치해있고, 커서를 그 다음 칸으로 이동 시키는 메소드가 next()이다. next() 메소드의 반환 값은 EOF의 경우 false, 그 외에는 읽을 행이 남았다는 의미로 true이다.

읽는 메서드는 get으로 시작하는 함수로 두 가지 종류가 있다.

파라미터설명
getXXXX(int columnIdx)칼럼 순서를 지정해서 값을 가져옴
getXXXX(String columnLabel)칼럼 레이블 이름으로 값을 가져옴

Reference

  • 출처 : github
  • 🎈2020.11.16

profile
안녕하세요:)

0개의 댓글