본문 바로가기
Stackoverflow

##과 $$의 차이를 말해주세요 Ibatis

by forkballpitch 2017. 10. 12.
728x90
728x90

변수에 들어가는 값이 bind로 대입되는 것과 직접 입력되는것의 차이입니다.

##는 bind 변수를 사용하는 것과 마찬가지로 값을 대입해 주는 것이고,

$$는 값을 가져와서 문자 직접 입력해주고 prepared statement 구문을 사용하는 것입니다.



추가로 preapred statement


1. prepareStatement

    - PrepareStatement 객체는 Connection 객체의 PrepareStatement() 메소드를 사용해서 생성

    -  SQL 문장이 미리 컴파일되고, 실행시간동안 인수값을 위한 공간을 확보할 수 있다는 점에서 Statement 객체와는 다름

    - 동일한 질의문을 특정 값만 바꾸어서 여러번 실행해야 할 때, 많은 데이터를 다루기 때문에 질의문을 정리해야 할 필요가 있을때

인수가 많아서 질의문을 정리해야 할 필요가 있을 때 사용하면 유용하다.

    - statement 객체의 SQL은 실행될 때 매번 서버에서 분석되어야 하는 반면, PrepareStatement 객체는 한번 분석되면 재사용이 용이합니다.

    - 각각의 인수에 대해 위치홀더(placeholder)를 사용하여 SQL 문장을 정의할 수 있게 해줍니다.

    - 위치홀더는 물음표로 표현됩니다.

    - 반드시 trycatch문 사용필요, 또는 throws 처리 해야한다.


try{

   String sql ="insert into member values(?,?,?,?)";

   pstmt =conn.PrepareStatement(SQL);

pstmt.setString(1,id);

pstmt,setString(2,passwd);

}catch(SQLExeption e){

}


Statement 객체와 PrepareStatement 객체 중에 무엇을 사용하는 것이 좋은가는 PreparedStatement 객체이다.

동일한 질의문 특정 값만 바꾸어서 여러번 실행해야 할때, 많은 데이터를 다루기 때문에 질의문을 정리해야할 필요가 있을 때

인수가 많아서 질의문을 정리해야 할 필요가 있을 때 좋다.

미리 컴파일되기 때문에 쿼리의 수행속도가 Statement 객체에 비해 빠름

Statement 객체는 쿼리 실행시 작은 따옴표가 들어있으면 작은 따옴표를 두개로 표시해야한다.

그러나 PreparedStatement 객체는 작은 따옴표의 문제를 쿼리 실행시 자동으로 처리하므로 신경 쓸 필요없다.




728x90
728x90