【问题标题】:Issue with Prepared Statement when using "?"使用“?”时,Prepared Statement 出现问题
【发布时间】:2014-02-05 00:34:16
【问题描述】:

好吧,我的问题很简单:“当我写 ? 代替表名时,它没有采取任何行动” 像这里,假设我有..

String full = "update ? set name = ? where id = ?";

但是当我删除第一个?并输入表名“一切都很完美”......有什么建议吗?

【问题讨论】:

    标签: java mysql jdbc prepared-statement


    【解决方案1】:

    在 JDBC 中,? 占位符代表一个值,它不能代表一个标识符,例如表名。它可以用于可以使用文字值的地方。您会注意到,您也不能在需要列名的地方使用 ?

    【讨论】:

    • 这不仅适用于 JDBC - 这适用于所有参数化查询。您不能参数化表名或列名
    • 有趣的是,使用 MySQL Connector/J,用参数值替换占位符发生在驱动程序中,而不是服务器端。有了这个驱动程序——与实际准备查询服务器端的驱动程序相反——你可以在任何地方使用?,它只是被一个带引号的字符串替换;所以对于 MySQL,它只是“意外”不起作用,因为结果查询是 update 'theTableName' set ....,这是一个语法错误。
    【解决方案2】:

    表名不能使用占位符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多