서블릿의 데이터베이스 (Oracle10)에 연결하는 데 JDBC
을 사용하고 있습니다.
다음은 세 가지 매개 변수를 동적으로 설정하려는 내 쿼리입니다.오라클 예외 : 잘못된 테이블 이름
- 테이블 이름
- 열 이름
- 값
검색어 :
query = "select ? from ? where ? = ?";
mypstmt = con.prepareStatement(query);
mypstmt.setString(1, tableName);
mypstmt.setString(2, columnName);
mypstmt.setString(3, columnName2);
mypstmt.setString(4, value);
그러나 쿼리 위
나에게 오류를주고있다 :java.sql.SQLException: ORA-00903: invalid table name
테이블 이름을 확인했습니다. 그것은 정확하고, 같은 질문을 작성하는 경우 :
query = "select "+columnName+" from "+tableName+" where "+columnName2+" = ?";
그러면 잘 실행됩니다.
그래서 내가 무엇을해야하는지 나는 mypstmt.setString(1,tableName)
로 EDIT1 나는 Table name
및 Column name
내가/테이블을 입력 사용자가 선택할 수 있도록하고 있다는 점이다 parameterize
할 이유를 Table name
및 Column Names
을 설정하려면 이름과 열 이름이 있으므로 SQL Injection
을 피하고 싶습니다.
'PreparedStatement'를 사용하여 열 이름을 매개 변수로 전달할 수 있습니까? – user75ponic
@Polppan - no. 값만 매개 변수로 전달할 수 있습니다. (그렇지 않으면 SQL 엔진이 준비된 명령문을 사전 컴파일/계획 할 수없고 주사 공격 등의 범위가 더 커질 수 있습니다.) –
아니오 ................. ..... – NINCOMPOOP