ecsimsw

JDBC / sql 쿼리 적용 / PreparedStatement 본문

JDBC / sql 쿼리 적용 / PreparedStatement

JinHwan Kim 2020. 5. 16. 14:55

PreparedStatement

 

  PreparedStatement를 사용하면, 미리 정해둔 sql 틀 안에 인자만 달리해서 마치 함수처럼 쿼리문을 재사용할 수 있다. 

 

  또 캐시의 적용으로 동일한 쿼리를 반복해서 사용할 때, Statement 보다 빠른 성능을 보인다. ( 단일 사용의 경우 Statement가 빠르다. )

 

  

사용 방법

PreparedStatement pstat = conn.prepareStatement(sql);

pstat.setString(parameterIndex, value);

pstat.executeUpdate();

rs = pstat.executeQuery();

 

사용 예시

try{
    Class.forName("com.mysql.jdbc.Driver");
    String url ="jdbc:mysql://localhost:3306/hellojdbc?serverTimezone=UTC";
    conn = DriverManager.getConnection(url, "root", "root");
    System.out.println("연결 성공");

    Statement stat=conn.createStatement();
    
    String sql = "insert into logininfo (id, pw) values (?,?)";
    PreparedStatement pstat = conn.prepareStatement(sql);
    pstat.setString(1,"admin3");
    pstat.setString(2,"admin4");
    pstat.executeUpdate();
    
    sql = "select * FROM logininfo WHERE id= (?)";
    pstat = conn.prepareStatement(sql);
    pstat.setString(1, "admin");
    rs =pstat.executeQuery();
    
    while(rs.next()) {
        String id =rs.getString("id");
        String pw =rs.getString("pw");
        System.out.println(id+" "+pw);
    }
    rs.close();
   
}
catch(ClassNotFoundException e){
    System.out.println(e+"드라이버 로딩 실패");
}
catch(SQLException e){
    System.out.println("에러: " + e);
}
finally{
    try{
        if( conn != null && !conn.isClosed()){
            conn.close();
        }
    }
    catch( SQLException e){
        e.printStackTrace();
    }
}
Comments