코딩항해기

[Error/JDBC] JDBC(Oracle) ' ' 내부 플레이스 홀더 오류 본문

Error solution

[Error/JDBC] JDBC(Oracle) ' ' 내부 플레이스 홀더 오류

miniBcake 2024. 8. 1. 15:15

 

(SQLException : 부적합한 열 인덱스)

 

jdbc를 하며 쿼리를 작성하다보면 플레이스홀더(?)가 '' 안에 들어가야하는 경우가 있다.

ex) SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE '%?%'

 

그러나 이처럼 쿼리를 작성하여 PreparedStatement를 통해 플레이스홀더에 값을 넣어 실행하게되면 하단의 오류가 발생한다.

 

부적합한 열 인덱스라는 예외가 발생한 모습

 

부적합한 열 인덱스 오류는 PreparedStatement객체에서 잘못된 열 인덱스를 사용했을 때 발생한다.

즉, setInt, setString 등으로 ?에 값을 넣어줄 때 오류가 발생했다는 것이다.

타입이 맞지 않았거나, 플레이스홀더의 개수와 전달되는 인덱스의 개수가 일치하지 않을 때 발생한다.

 

결론부터 정리하면 이번에는 후자의 이유로 오류가 발생하게 되었다.

Oracle의 경우 jdbc로 쿼리를 작성할 때 ''안에 플레이스홀더를 넣어 작성하면, 플레이스홀더로 인식하는 것이 아니라 단순 문자열로 받아들이게 되어 플레이스 홀더 개수가 일치하지 않게 되기 때문이다.

 

이는 Oracle에서만 발생하는 오류로, 다른 dbms에서는 발생하지 않는다.

이런 경우에는 연결 연산자를 사용하여 정상 작동되도록 할 수 있다.

 

ex) SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE '%' || ? || '%'