【问题标题】:Update command with special SQL keywords in JDBC在 JDBC 中使用特殊 SQL 关键字更新命令
【发布时间】:2014-06-17 05:29:00
【问题描述】:

我正在尝试更新我的 SQL 表中的条目,该条目在 JDBC 中具有“来自”的列名。 以下是我尝试执行的 SQL 命令:

    sql = "Update email_template set [from]="+"'"+3+"'"+" WHERE id="+idno;
    stmt.executeUpdate(sql);

但它显示以下错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '[from]='Akshit' WHERE id=1' 行附近使用的正确语法

【问题讨论】:

  • 你的字段名是什么from[from]
  • 你为什么用[from]?尖括号?
  • 然后去掉括号,只用from
  • 我使用了方括号,因为我在 stackoverflow 的某个地方读到了特殊的 SQL 关键字,如“from”、“to”等需要包含在方括号内。但是,即使没有括号,也会显示相同的错误。
  • mysql - SQL Error 1064 的可能重复项

标签: java mysql sql jdbc


【解决方案1】:

MySQL 转义列名的方式是使用反引号:

sql = "Update email_template set `from`="+"'"+3+"'"+" WHERE id="+idno;

【讨论】:

    【解决方案2】:

    我建议在 Java 中处理 SQL 时使用java.sql.PreparedStatement。它可以用于批处理,并确保恶意 SQL 不会作为 SQL 代码的一部分注入。

    这是您的代码在PreparedStatement 下的样子:

    PreparedStatement stmt = connection.prepareStatement("UPDATE `email_template` SET `from` = ? WHERE id = ?"); 
    stmt.setInt(1, 3);
    stmt.setInt(2, idno);
    stmt.executeUpdate();
    

    如果这是您一次对多行执行的操作,请将stmt.executeUpdate() 替换为stmt.addBatch()(可能在某个循环中),当您准备好执行批量更新时,您调用stmt.executeBatch()

    请注意,executeUpdate()executeBatch() 都返回受影响的行数;这是您可能希望在提交后验证的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2014-09-15
      • 2018-05-01
      • 2011-10-20
      相关资源
      最近更新 更多