반응형

출처: https://community.oracle.com/thread/433438


JDBC에서 쿼리문의 변수값을 동적으로 바인딩하기 위해 Preparestatement를 사용한다.

그러나 이를 이용해서 테이블명을 동적으로 바인딩할 수 없다.


PreparedStatement pstmt = null;
String sql = "select * from ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "tableName");
ResultSet rs = pstmt.executeQuery();
이렇게 한들 쿼리문에 테이블 이름은 바인딩되지 않고 ?가 그대로 가버리며
결국 테이블명이 부적합하단 에러를 보내게 된다.
해결 방법은 아예 테이블명 변수를 따로 선언해서 SQL문을 선언할 때 그 변수와 합치는 것이다.
PreparedStatement pstmt = null;
String sql = "select * from " + bank;
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
다음과 같이 선언하면 의도했던 바와 같이 테이블명을 동적으로 인식하게 된다.


반응형
Posted by 애콜라이트
l

free counters