我对以下要发送到MySQL服务器的语句有困难:
UPDATE abonament SET ? = '1' WHERE abonutid = ?
我将它们替换为:
ps.setString(1, "`" + (indexLunaPlatita + 1) + "`");
ps.setInt(2, selVal);
但是当我运行程序时,我会把它变成MySQL:
''`24`' = '1' WHERE abonutid = 2'
因此它会自动用''。
包围后面的滴答表达式请帮忙吗?
谢谢!
答案 0 :(得分:2)
您不能将占位符(?
)用于列名,仅用于值。这是一般规则(不限于MySQL)。
如果您需要根据用户输入确定列名,请务必小心 - 您必须清理输入以避免自己的SQL注入攻击,在这种情况下JDBC无法帮助您防止攻击。
?
不适用于您的案例的原因是因为这些参数化查询是使用预准备语句实现的:
由于在第二步之前不会发送这些值,因此它们不能用于确定语句实际功能的任何内容(例如,它使用哪个或哪些表)。