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

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

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

т.е.

    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", .., .. ));
1
задан skaffman 21 June 2010 в 08:47
поделиться

2 ответа

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

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

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

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

0
ответ дан 2 September 2019 в 23:39
поделиться

SQL поддерживает разграниченные идентификаторы, поэтому вы можете использовать пунктуацию, пробелы, специальные символы, международные символы или ключевые слова SQL в качестве имен таблиц или столбцов.

См. мой прошлый ответ на Используют ли разные базы данных разные кавычки для имен?

В MySQL используйте обратные кавычки:

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

Или установите SQL_MODE в режим ANSI и используйте двойные кавычки:

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

Вы не можете использовать ? для имени таблицы в SQL. Это просто не поддерживается языком. Вы можете использовать параметр только там, где обычно используется буквальное значение, например целое число или строка в одинарных кавычках.

2
ответ дан 2 September 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: