0

我收到“列计数与第 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();
4

3 回答 3

4

“列计数与第 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);
于 2012-11-22T14:38:17.637 回答
0

只需定义您明确插入的列

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

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

于 2012-11-22T14:40:21.937 回答
0

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

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

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

当您为所有列指定了所有值时,您只能使用这种类型的语法,例如,您有一个包含3 列的表,然后您可以使用它

INSERT INTO tableName  VALUES ('a','b','c')
于 2012-11-22T14:38:06.387 回答