【问题标题】:Column count doesn't match value count at row 1 - Java SQL [duplicate]列计数与第 1 行的值计数不匹配 - Java SQL [重复]
【发布时间】:2012-11-10 23:34:19
【问题描述】:

我收到“列计数与第 1 行的值计数不匹配”,但我似乎无法修复它。我尝试更改引号和数据类型,但仍然没有运气。谁能看到我哪里出错了?

public void actionPerformed(ActionEvent arg0) {
            if(!textField.getText().isEmpty() && !textField_1.getText().isEmpty() && !textField_2.getText().isEmpty() && !textField_3.getText().isEmpty() && !textField_4.getText().isEmpty() && !textField_5.getText().isEmpty() && !textField_6.getText().isEmpty() && !textField_7.getText().isEmpty())
            {
                String moduleName = textField.getText();
                String studId = textField_1.getText();
                String sFName = textField_2.getText();
                String sLName = textField_3.getText();
                int weekNo = Integer.parseInt(textField_4.getText());
                int lAttend = Integer.parseInt(textField_5.getText());
                int tAttend = Integer.parseInt(textField_6.getText());
                int wAttend = Integer.parseInt(textField_7.getText());

                lh.addStud(moduleName, studId, sFName, sLName , weekNo, lAttend, tAttend, wAttend);
            }
            else
            {
                lblNewLabel_4.setText("You have Missing Field");
            }
            fillDB();
           }
        });

以下是我的查询:

String aSQuery = "INSERT INTO Group6_Register VALUES ('" + moduleName + "', '" + studId + "', '" + sFName + "', '" +  sLName +"', '" +  weekNo + "', '" +  lAttend + "', '"  + tAttend + "', '" + wAttend + "')";
            statements = connection.prepareStatement(aSQuery);
            statements.executeUpdate();

【问题讨论】:

  • 我猜Group6_RegisterPK字段在这里省略了
  • prepareStatement 在哪里?

标签: java mysql database


【解决方案1】:

“列数与第 1 行的值数不匹配”

通常发生在您在 values 子句中定义的列与您的实际表列不匹配时。

假设你的表有 4 列,col1 col2 col3 col4

现在您只想将数据插入 col2, col3, col4

您的插入语句应该是

Insert into table (col2, col3, col4) values(col2val, col3val, col3val)

但是,我强烈建议您在使用 JDBC 执行 sql 查询时使用PreparedStatement

   String query= "Insert into table (col2, col3, col4) Values(?,?,?)";
   Statement st = conn.preparedStatement(query);
   st.setString(1, col2value);
   st.setString(2, col3Val); 
   st.setString(3, col4Val);

【讨论】:

  • 谢谢,它成功了。非常清晰和有帮助。最后一件事,插入新数据后如何刷新 JTable?我必须重新运行它才能看到更新。
  • @user1781232 检查此链接stackoverflow.com/questions/3179136/…
  • 当我把 tableModel.fireTableDataChanged();我收到一条错误消息,提示“令牌“fireTableDataChanged”上的语法错误,此令牌后应有标识符”
  • 我建议您先自己解决,如果您无法将其作为新问题发布以寻求帮助。但我相信你可以自己弄清楚:)
【解决方案2】:

只需定义明确插入的列

INSERT INTO table (col1,col2,coln) VALUES ( val1, val2, val3 )

否则你必须为每个字段设置一个值

【讨论】:

    【解决方案3】:

    这是因为您使用了 implicit 类型的 INSERT 语句。服务器期望您已为所有列提供了所有值,但您并没有这就是它引发异常的原因。

    最好的方法是显式声明值绑定到的列名,例如。

    INSERT INTO tableName (colA, colB, colC)
    VALUES ('a','b','c')
    

    只有在为所有列指定了 all 值时,才能使用这种类型的语法,例如,您有一个具有 3 列的表,那么您可以用这个

    INSERT INTO tableName  VALUES ('a','b','c')
    

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多