메뉴 닫기

[JDBC] JDBC와 Query statement

JDBC 사용하는 순서

  1. 드라이버 등록 (사용할 DB에 따라 다름)
    String driver = “com.mysql.cj.jdbc.Driver”;
    Class.forName(driver);
    실행될때 객체를 생성하도록 한다.
  2. Connection 만들기(네트워크 연결)
    Connection con = DriverManager.getConnection(url, user, password);
  3. Statement 만들기 ( 쿼리를 담을 그릇)
    Statement stat = con.createStatement();
  4. 쿼리 담기 -> DB전송 ( 쿼리 실행)
    String query = “SELECT * FROM 테이블”;
    ResultSet rs = stat.executeQuery(query); //select문을 사용할때는 statement.executeQuery(query) 리턴 타입 == String
    int c = stat.executeUpdate(); // 이외 delete, insert, update 사용시 executeUpdate 리턴 타입 == int
  5. DB작업한 결과를 Resultset이나 int로 받아온다. (결과 처리)
    while(rs.next()) { //rs.next() -> 다음 줄로 가는 것
    String num = rs.getString(1); //rs.getString(i) i 번째 column의 값을 스트링으로 변환
    System.out.println(num + “–” + name + “–” + address);
    }
  6. 마무리, status, connection close
    rs.close();
    stat.close();
    con.close();

PreparedStatement

String query = “INSERT INTO customer VALUES(?,?,?)”;
PreparedStatement stat = con.prepareStatement(query);
PreparedStatement 사용시 바뀌는 부분만 스트링에서 ? 로 마킹

Statement의 종류 Statement , PreparedStatement, CallableStatement

성능은 오른쪽으로 갈수록 좋다.
Statement
빈 그릇 ->(execute) 수행할 때 담아서 전달.

PreparedStatement
형식이 정해진 빈그릇 에서 바뀌지 않는 내용은 그릇에 쿼리를 미리 설정해 놓는다.
쿼리를 실행하기전에 ?값을 설정해야한다. pstat.setString(index, 값) 으로 설정할 수있다.
말 그대로 쿼리의 일부분을 미리 저장하고 있는 그릇이다.

CallalbeStatement
실행 시킬 쿼리가 데이터베이스에 이미 있다. 자바에서 DB에 저장된 쿼리문을 부를 수 있다.

PreparedStatement가 Statement보다 빠른 이유

PreparedStatement의 경우 반복되는 쿼리의 일부분이 담겨있기 때문에 DB가 쿼리문을 컴파일 할 때, 고정된 부분을 미리 컴파일해서 계속 가지고 있는다.
Statement의 경우는 일회용이다. 매번 새로 컴파일 하기 때문에 속도차이가 난다.
즉 preparedStatement – > 변하지 않는 부분 prepared 된 부분을 컴파일 해서 유지하지만 그냥 Statement -> 매번 쿼리문을 컴파일한다.
당연히 CallableStatement의 경우에는 DB에 저장된 쿼리문을 실행시키기 때문에 가장 빠르다.

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.

%d 블로거가 이것을 좋아합니다: