列计数不为';第1行的值计数不匹配-Java SQL
我得到了“第1行的列计数与值计数不匹配”,但我似乎无法修复它。我试图更改引号和数据类型,但仍然没有成功。有人能看出我哪里出了错吗列计数不为';第1行的值计数不匹配-Java SQL,java,mysql,database,Java,Mysql,Database,我得到了“第1行的列计数与值计数不匹配”,但我似乎无法修复它。我试图更改引号和数据类型,但仍然没有成功。有人能看出我哪里出了错吗 public void actionPerformed(ActionEvent arg0) { if(!textField.getText().isEmpty() && !textField_1.getText().isEmpty() && !textField_2.getText().isEmpty() &am
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();
这是因为您使用的是
INSERT
语句的隐式类型。服务器希望您为所有列提供了所有值,但您没有,这就是它引发异常的原因
最好的方法是显式声明值绑定到的列名,例如
INSERT INTO tableName (colA, colB, colC)
VALUES ('a','b','c')
只有在为所有列指定了所有值时,才能使用这种类型的语法,例如,有一个表有3列,然后可以使用这种语法
INSERT INTO tableName VALUES ('a','b','c')
这是因为您使用的是
INSERT
语句的隐式类型。服务器希望您为所有列提供了所有值,但您没有,这就是它引发异常的原因
最好的方法是显式声明值绑定到的列名,例如
INSERT INTO tableName (colA, colB, colC)
VALUES ('a','b','c')
只有在为所有列指定了所有值时,才能使用这种类型的语法,例如,有一个表有3列,然后可以使用这种语法
INSERT INTO tableName VALUES ('a','b','c')
“列计数与第1行的值计数不匹配”
通常在values子句中定义的列与实际表列不匹配时发生
假设您的桌子有4个coulmns,col1 col2 col3 col4
现在您只想将数据插入col2、col3、col4
您的insert语句应该是
Insert into table (col2, col3, col4) values(col2val, col3val, col3val)
但是,我强烈建议您在使用JDBC执行sql查询时使用
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);
“列计数与第1行的值计数不匹配”
通常在values子句中定义的列与实际表列不匹配时发生
假设您的桌子有4个coulmns,col1 col2 col3 col4
现在您只想将数据插入col2、col3、col4
您的insert语句应该是
Insert into table (col2, col3, col4) values(col2val, col3val, col3val)
但是,我强烈建议您在使用JDBC执行sql查询时使用
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);
只需明确定义插入的列
INSERT INTO table (col1,col2,coln) VALUES ( val1, val2, val3 )
否则,您必须为每个字段设置一个值,只需明确定义插入的列即可
INSERT INTO table (col1,col2,coln) VALUES ( val1, val2, val3 )
否则,您必须为每个字段设置一个值我猜
PK
这里省略了Group6\u Register
的字段,这里是prepareStatement
吗?我猜PK
这里省略了Group6\u Register
的字段,这里是prepareStatement
吗?谢谢,它起作用了。非常清楚和有用。最后一件事,插入新数据后如何刷新JTable?我必须重新运行它才能看到更新。@user1781232在我放置tableModel.fireTableDataChanged()时检查该链接;我得到一个错误,说“Syntax error on token”fireTableDataChanged,这个标记后面应该有标识符“我建议您首先自己解决这个问题,如果您不能解决这个问题,请将其作为一个新问题发布以寻求帮助。但我相信你自己能弄明白:)谢谢你,成功了。非常清楚和有用。最后一件事,插入新数据后如何刷新JTable?我必须重新运行它才能看到更新。@user1781232在我放置tableModel.fireTableDataChanged()时检查该链接;我得到一个错误,说“Syntax error on token”fireTableDataChanged,这个标记后面应该有标识符“我建议您首先自己解决这个问题,如果您不能解决这个问题,请将其作为一个新问题发布以寻求帮助。但我相信你可以自己解决:)