【问题标题】:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version etc您的 SQL 语法有错误;检查与您的 MySQL 服务器版本等对应的手册
【发布时间】:2016-02-09 05:09:28
【问题描述】:

我有一个具有 id(autoincrement) 和名称的简单表,我正在尝试做一个非常简单的插入查询

if (connect != null) {
                query = new StringBuffer("");
                query.append("INSERT INTO ");
                query.append("GROUP( ");
                query.append("GROUP_NAME ");
                query.append(") values (");
                query.append("?)");
                System.out.println(query.toString());
                stmt = connect.prepareStatement(query.toString());
                int i = 0;
                stmt.setString(1, group.getGroupName());
                records = stmt.executeUpdate();
}

但它给了我一个堆栈跟踪的例外:

2016-02-09T10:00:44.876+0500|严重: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 'GROUP( 第 1 行的 GROUP_NAME ) 值 ('Hockey')'

我已经搜索过此类问题,但找不到合适的解决方案。

【问题讨论】:

  • query.toString() 打印出什么?
  • 可能是GROUP 不允许作为表名。
  • 是的,没错,我的错-_-

标签: java mysql jdbc


【解决方案1】:

GROUP 是 MySQL 中的 reserved word

标准 SQL 禁止将表中的大多数保留字用作列名或表名(例如,GROUP)。

出于这个原因,您最好不要使用保留字作为标识符。如果绝对必须,请使用反引号 ` 引用保留字,如 MySQL 参考手册的Section 9.2.1 中所述。

【讨论】:

  • 谢谢你,先生,不敢相信我没有看到。顺便说一句,为什么我不能使用简单的引号而不是反引号,因为我认为它不在我的键盘上。
  • This answer on dba.stackexchange.com 建议您可以设置一种模式以允许使用 ANSI SQL 双引号 (") 而不是 MySQL 特定的反引号。
  • thnx :) 我会调查一下
  • 不使用保留字就不需要反引号,所以不要。
【解决方案2】:

您不能在 MySQL 中使用 GROUP 作为名称,除非它包含在反引号中:

INSERT INTO `group` (GROUP_NAME) VALUES (?)

【讨论】:

  • 是的,没错 :) 非常感谢。我会赞成你的答案,但没有足够的积分
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多