【问题标题】:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException - Unknown column in field listcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException - 字段列表中的未知列
【发布时间】:2013-02-27 10:01:37
【问题描述】:

我收到以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“字段列表”中的未知列“userId”

导致这个错误的代码是这样的:

PreparedStatement pstmt = 
    con.prepareStatement(
        "INSERT INTO " + 
        tableName + 
        " (userId,username,email,password) VALUES (?,?,?,?)");

我的表是由以下命令创建的

stmt.executeUpdate(
    "CREATE TABLE " + 
    tableName + 
    " (" + 
    " userId INT, " + 
    " userName VARCHAR(255) NOT NULL, " + 
    " email VARCHAR(255) NOT NULL, " + 
    " password VARCHAR(255), " + 
    " PRIMARY KEY(userId)" + 
    " )");
stmt.close();

如果有的话,谁能帮我找出我的错误。我是这方面的新手,所以我很难找到错误的确切位置。

【问题讨论】:

  • tableName 是否包含您在准备声明时所期望的值?
  • 您的错误显示列名 userid 中的“i”很小。不应该是资本吗?
  • @ShashankKadne MySQL 列名不区分大小写,但表名通常是。 dev.mysql.com/doc/refman/5.0/en/…
  • 是的。在调用准备语句之前,我尝试打印出 tableName 的值。它具有正确的值。
  • 您是否验证过 create 语句确实成功了?您可能没有在数据库中拥有同名但列不同的表?

标签: java sql web-applications jdbc


【解决方案1】:

错误是因为已经存在另一个具有相同表名的表。

【讨论】:

  • 这个答案和@Perception评论一样吗?
  • @IswantoSan 是的。它是。但我不知道如何给它贴上 Perception 的标签。无论如何,我赞成他的回答。
【解决方案2】:

另一件需要注意的事情是触发器。我遇到了同样的错误,最终确定该错误是触发器语句而不是插入语句的结果。 “未知列”位于触发器试图插入的表中。

【讨论】:

    【解决方案3】:

    如果您使用插入语句并且有列值缺失或为空。它可以给出这个错误。我正在使用准备好的语句。对于具有数字数据类型的列,我收到此错误。其根本原因是空字符串作为列值传递。奇怪的是它抛出“未知列”e

    【讨论】:

      猜你喜欢
      • 2017-06-27
      • 2016-10-07
      • 2014-07-19
      • 2018-05-15
      • 2012-10-13
      • 1970-01-01
      • 2015-03-04
      • 2018-05-12
      • 2015-05-28
      相关资源
      最近更新 更多