java JDBC PreparedStatement似乎忽略了占位符
给定PreparedStatement
的以下代码,我使用占位符(?)用String
填充:
String sql = "SELECT SUM(Premium), SUM(AgentComm)\n" +
"FROM \"?_KLCommissions\" \n" +
"WHERE AgentCode = \"?\";";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, year);
preparedStatement.setString(2, agent.getAgentNumber());
ResultSet resultSet = preparedStatement.executeQuery();
但是,在执行查询时,我得到一个SQL错误:no such table: ?_KLCommissions
为什么在处理查询时?
占位符没有被替换
# 1 楼答案
它包含在双引号内,这意味着它不是占位符-它只是值的一部分
除此之外,大多数SQL数据库不允许将参数用于表名和列名之类的内容-只有值可以参数化。因此,您可能需要直接构建表名部分,然后使用
对于代理代码-因此您只需设置一个参数。比如:
注意这里的TODO—您确实不希望用户能够为
year
提供任意值,因为这样他们就可以在您的查询中放入任意SQL