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

Ah ha. Спасибо. Это также относится к именам схем? – stackexchanger

+0

Да. В PreparedStatement только параметры могут быть определены с помощью '?'. –

Смежные вопросы