JSP

PreparedStatement 사용 이유

Sun-Koo 2023. 3. 14. 16:27

가독성과 유지보수가 좋다. 

PreparedStatement( ) 메소드를 통해 PreparedStatement 객체를 생성할 때 인자값으로 실행할 SQL문을 지정하는데, 값을 동적으로 지정해야할 때 ? 기호로 대체할 수 있다.

String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
 
//Statement
Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into test values('"+id+"', '"+pwd+"')");
 
//PreparedStatement
PreparedStatement pstmt = conn.prepareStatement("insert into test (id, pwd) values(?, ?)");
pstmt.setString(1, id);
pstmt.setString(2, pwd);
pstmt.executeUpdate();

쿼리 실행계획이 재사용된다. 

DB서버가 쿼리를 처리하는 과정을 반복하지 않고 한번만 처리하여 퍼포먼스를 높이는 것을 의미

List<MemberBean> memberList = new ArrayList<MemberBean>();
 
MemberBean m1 = new MemberBean();
m1.setUserId("user1");
m1.setPasswd("123");
memberList.add(m1);
 
MemberBean m2 = new MemberBean();
m2.setUserId("user2");
m2.setPasswd("456");
memberList.add(m2);
 
MemberBean m3 = new MemberBean();
m3.setUserId("user3");
m3.setPasswd("789");
memberList.add(m3);
 
//PreparedStatement
PreparedStatement pstmt = conn.prepareStatement("insert into test (id, pwd) values(?, ?)");
 
int count = memberList.size();
MemberBean tMember;
 
for(int i=0;i<count;i++)
{
    tMember = memberList.get(i);
     
    pstmt.setString(1, tMember.getUserId());
    pstmt.setString(2, tMember.getPasswd());
    pstmt.executeUpdate();
}

 

그 외에도 SQL 인젝션 취약점을 보완할 수 있는 장점이 있다.


정리

  • 가독성과 유지보수가 좋다. 
  • 쿼리 실행계획이 재사용된다. 
  • SQL 인젝션 취약점을 보완