имя таблицы msql со знаком $

У меня есть таблицы в Mysql 5 db с именами с префиксом знака доллара "$", т.е. имя таблицы $MYTABLE

Я использую Spring 3.0 JdbcTemplate для выполнения моего запроса на выборку, но не смог заставить его работать.

ie

    String tablename = "$AAPL";

    private static final String STOCK_SELECT = 
    "select symbol, open, high, low, close, vol, ev from ?";

    jdbcTemplate.query(STOCK_SELECT, 
                       new Object[] { tablename },
                       new RowMapper() { .... } );

Это всегда будет вызывать InvalidSqlException, предположительно из-за знака $. Если я просто сделаю обычный запрос без параметров, т.е.

    private static final String STOCK_SELECT = 
    "select symbol, open, high, low, close, vol, ev from $AAPL";

Тогда все работает.

Как я могу избежать знака $ с помощью jdbcTemplate?

-- Редактировать, что я в итоге сделал --

Вместо того, чтобы передавать имя таблицы "$AAPL" в jdbcTemplate, я просто создаю строку SQL вручную, т.е.

 jdbcTemplate.query( getStockSelect("$AAPL", .., .. ));

person Lydon Ch    schedule 20.06.2010    source источник
comment
Как тебе вообще удалось это? Самым простым решением было бы убрать знаки препинания из имен ваших таблиц...   -  person Charles    schedule 20.06.2010


Ответы (2)


Информация базы данных, такая как имена/идентификаторы таблиц и столбцов, не предназначена для параметризации. MySQL использует обратную кавычку (`) для имен/идентификаторов таблиц и столбцов. Ваш параметризованный запрос, вероятно, будет выглядеть так:

 select symbol, open, high, low, close, vol, ev from "$AAPL"

Я не знаю ни одного стандартного API для параметризации/экранирования таких идентификаторов. Я бы порекомендовал, если вы можете, просто иметь его там статически. Поскольку это одни и те же столбцы, разделяющие таблицу, это также может быть вариантом. Наконец, если вам все еще нужно, чтобы он был динамическим, вам придется самостоятельно экранировать имя таблицы, я бы рекомендовал извлекать его только из белого списка.

Вы можете взглянуть на документацию mysql о том, как экранировать идентификаторы. .

person Reece45    schedule 20.06.2010