위와 같이 PreparedStatement의 setString를 사용하여

sql문에 ?를 대입하여 입력하였다.

 

검색을 진행하였으나 위와 같이 아무런 것도 검색이 안되는 문제가 발생하였다.

그리고 콘솔 확인시 부적합한 열 인덱스 오류가 발생하는 것으로 확인된다.

해당 오류의 원인은 아래 문구에 있었던 것으로 확인된다.

 

setString, setInt의 경우 대입되는 값에 ''가 붙게된다 아래 예시를 들도록하겠다.

String test = "hi";
int num = 1;
setString(1, test);
setInt(2, num);

위의 코드 실행시 setString과 setInt의 인자는 전달될 때 ''가 붙어서 전달된다.

그러므로 test는 'hi'가 되고 num은 '1'이 된다.

 

그럼 ''가 붙었다고 오류가 발생되는 이유는 무엇일까

이유는 아래 코드를 다시 보도록하자

위의 코드를 보면 첫번째 ?에서 칼럼명을 전달하고 두번째 ?에서 검색할 값을 전달한다.

그런데 칼럼명에는 ''를 넣지않았다.

예를들어 칼럼명이 hi라면 setString으로 전달된 인자는 'hi'라고 전달된다.

그런데, 칼럼명에는 hi라는 칼럼명이 있지만 'hi'라는 칼럼명은 없기 때문에 위와 같이 부적합한 열 인덱스라는 오류가 발생한다.

 

또한 '%?%'역시 두번째 물음표에 모모라고 검색했을시 '%'모모'%'라고 검색되기 때문에 동일하게 오류가 발생되게 된다.

 

그렇다면 해당 문제는 어떻게 해결할 수 있을까?

아래와 같이 해결할 수 있다.

 위의 코드를 분석해보면 해결할 수 있다.

우선 칼럼명은 위와 같은식으로 +칼럼명+ 식으로 해결하였고

검색하는 것은 위에 주석처리한 부분에 설명된 것처럼 해결하였다.

 

그러므로 위와 같이 PreparedSetstring을 사용할 경우 위와 같은 문제 해결을 할수 있으니 참고하도록하자

 

추가로 숫자의 경우는 문제 없을까?

숫자의 경우 오라클에서 확인이 가능하듯이 ''가 붙어도 정상 조회가 되니 참고하도록하자

+ Recent posts