java - 带$符号的sql表名

标签 java mysql spring jdbc jdbctemplate

我在 Mysql 5 db 中有一些表,其名称以美元符号“$”为前缀 即表名 $MYTABLE

我正在使用 Spring 3.0 JdbcTemplate 来执行我的选择查询,但无法让它工作。

    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", .., .. ));

最佳答案

SQL 支持定界标识符,因此您可以使用标点符号、空格、特殊符号、国际字符或 SQL 关键字作为表名或列名。

查看我过去对 Do different databases use different name quote? 的回答

在 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 中为表名使用 ? 占位符。这只是语言不支持的。您可以在通常可以使用文字值(如整数或单引号字符串)的地方使用参数。

关于java - 带$符号的sql表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078312/

相关文章:

java - OpenGL ES 中的旋转

mysql - 如何获取TADOQuery中字段的长度?

php - 我应该用什么方式创建我的下载计数器数据库? MySQL PHP

spring - 获取原因 :null in property dlqDeliveryFailureCause

java - Spring Di通过setter动态构造函数参数

java - 如何通过 Jackson 2 JsonNode 树遍历 JSON?

java -version 返回错误,但 bash 配置文件正确

java - 如何知道远程服务器是否与远程控制 Java 代码断开连接

mysql - 在不使用代码服务器的情况下同时更新和转换列的值

java - Spring 安全秒 :authorize tag using Java Config