使用MySQL作为列名

ama*_*mal 0 java mysql prepared-statement sql-like

我想使用preparestatement编写一个mysql select查询。但是最后一部分是concat('%', itemName, '%')"; itemName表的列,存在语法错误ItemMain。我已经尝试过以下3个查询。

String sql ="SELECT * FROM ItemMain WHERE ? = 'All' OR ? like concat('%', itemName, '%')";
String sql ="SELECT * FROM ItemMain WHERE ? = 'All' OR ? like  '%'+itemName+'%'";
String sql ="SELECT * FROM ItemMain WHERE ? = 'All' OR ? like  '%itemName%'";
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 5

字段名称不能使用占位符。查询必须是

... WHERE somefield=? OR otherfield LIKE concat('%', ?, '%')
Run Code Online (Sandbox Code Playgroud)

占位符仅用于VALUES。字段/表名,函数名或SQL中的任何“结构”词均不可使用。

这是mysql预准备语句的一般规则。它不是java / php / c#/任何限制。