Java 带有$符号的msql表名
我有Mysql 5DB中的表,其名称前缀为美元符号“$” ie tablename$MYTABLE 我正在使用Spring3.0JDBCTemplate执行select查询,但无法使其工作 即 这将始终抛出InvalidSqlException,可能是因为$符号。 如果我只是做一个没有参数的普通查询,即Java 带有$符号的msql表名,java,mysql,spring,jdbc,jdbctemplate,Java,Mysql,Spring,Jdbc,Jdbctemplate,我有Mysql 5DB中的表,其名称前缀为美元符号“$” ie tablename$MYTABLE 我正在使用Spring3.0JDBCTemplate执行select查询,但无法使其工作 即 这将始终抛出InvalidSqlException,可能是因为$符号。 如果我只是做一个没有参数的普通查询,即 private static final String STOCK_SELECT = "select symbol, open, high, low, close, vol,
private static final String STOCK_SELECT =
"select symbol, open, high, low, close, vol, ev from $AAPL";
然后一切都开始了
如何使用jdbcTemplate转义$sign
-编辑,我最后做的是-
我没有将表名$AAPL传递给jdbcTemplate,而是手动创建SQL字符串,即
jdbcTemplate.query( getStockSelect("$AAPL", .., .. ));
SQL支持分隔标识符,因此您可以使用标点符号、空格、特殊符号、国际字符或SQL关键字作为表名或列名
看看我过去对你的回答
在MySQL中,使用反引号:
private static final String STOCK_SELECT =
"select symbol, open, high, low, close, vol, ev from `$AAPL`";
或将SQL_模式设置为ANSI模式并使用双引号:
private static final String STOCK_SELECT =
"select symbol, open, high, low, close, vol, ev from \"$AAPL\"";
你不能用电话吗?SQL中表名的占位符。这是语言所不支持的。只有在通常可以使用文字值(如整数或单引号字符串)的情况下,才可以使用参数。数据库信息(如表和列名/标识符)不需要参数化。MySQL使用backtick`表示表名和列名/标识符。您的参数化查询可能以如下方式进入:
select symbol, open, high, low, close, vol, ev from "$AAPL"
我不知道有任何标准API用于参数化/转义这样的标识符。如果可以的话,我建议把它静态地放在那里。因为它们是相同的列,所以表也可能是一个选项。最后,如果您仍然需要它是动态的,那么您必须自己转义表名,我建议您只从白名单中提取它
你可能想看看。你到底是怎么做到的?最简单的解决方法是去掉表名中的标点符号。。。
select symbol, open, high, low, close, vol, ev from "$AAPL"