반응형
출처: 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();다음과 같이 선언하면 의도했던 바와 같이 테이블명을 동적으로 인식하게 된다.
반응형