2014-10-23 3 views
1

저는 Spring을 처음 사용하고 NamedParameterJdbcTemplate을 사용하는 간단한 테스트 메소드를 작성하려고합니다. 여기에 있습니다 :NamedParameterJdbcTemplate은 값을 대체하지 않습니까?

public String test() { 
    String query = "SELECT CURRENT DATE FROM :table ;"; 
    return String.valueOf(this.namedTemplate.queryForObject(query, 
     new MapSqlParameterSource("table", "sysibm.sysdummy1"), 
      String.class)); 
} 

DB2에서는 해당 쿼리가 오늘 날짜를 반환합니다. 그러나 예외가 발생합니다.

Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT CURRENT DATE FROM ? ;]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=?;( XMLTABLE TABLE FINAL OLD, DRIVER=4.13.127

SQLCODE -104는 "불법 기호"입니다. 나는 이것이 ?을 말하는 것이라고 생각합니다. 왜 "sysibm.sysdummy1" 문자열 대신 그걸 얻고 있습니까?

답변

2

매개 변수로 테이블 이름을 설정할 수 없습니다. 쿼리에 명시 적으로 정의해야합니다.

+0

아 하. 고맙습니다. 이것은 스키마 이름에도 적용됩니까? – stackexchanger

+0

예. PreparedStatement에서 '?'를 사용하여 매개 변수 만 정의 할 수 있습니다. –

관련 문제