【问题标题】:The following query causes a MySQLSyntaxErrorException - what is wrong with my query?以下查询导致 MySQLSyntaxErrorException - 我的查询有什么问题?
【发布时间】:2016-09-27 05:13:03
【问题描述】:

当我执行以下查询时会引发以下异常

原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你的SQL语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 '-name, cpy-address, cpy-contact) VALUES('nauman','ahmad18',12)' 附近使用正确的语法

导致异常的查询

  String query="insert into company(cpy-name, cpy-address, cpy-contact)VALUES(?,?,?)";
   Connection con=DataAccessLayer.getConnection();

   PreparedStatement stat=con.prepareStatement(query);
   stat.setString(1, cname);
   stat.setString(2, caddress);
   stat.setInt(3,x );
   int rowsAffected = stat.executeUpdate();

【问题讨论】:

  • 不要在表/列标识符中使用“-”。它会让你发疯。更糟糕的是,在特殊情况下可能会导致您不知道的错误。

标签: java mysql sql exception


【解决方案1】:

如果是列名,则不能在 SQL 查询中使用破折号- 符号,以便重命名列名或在列名和表名的两侧使用 Escape `

【讨论】:

    【解决方案2】:

    您不能在 SQL 查询中使用 -。使用` 反引号或反引号字符转义列名。

    insert into company(`cpy-name`, `cpy-address`, `cpy-contact`)VALUES(?,?,?)
    

    另一方面,如果数据库在您的控制之下,请将列名更改为使用“_”而不是“-”。使用非法字符并引用它们不是一个好习惯。 希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      正如@uday 所说,您应该更改列名或使用

      " `"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 2010-12-23
        • 2010-11-26
        • 2017-02-25
        相关资源
        最近更新 更多