我有这个错误。指数2超出范围。在pst.setString(2,textField.getText(); 我该怎么处理它。
这是我的代码
try{
String sql="update inventory set Name=?,Category=?,Brand=?,Price=?,ExDate=?,Tags=?,Quantity=?,Barcode=? where Id=?";
pst.setString(2, textField.getText());
pst.setString(3, textField_1.getText());
pst.setString(4, textField_2.getText());
pst.setString(5, textField_3.getText());
pst.setString(6, textField_4.getText());
pst.setString(7, textField_5.getText());
pst.setString(8, textField_9.getText());
pst.setString(9, textField_6.getText());
pst.setString(1, textField_8.getText());
pst=con.prepareStatement(sql);
pst.executeUpdate();
JOptionPane.showMessageDialog(null,"Updating Item Successful","Updated",JOptionPane.PLAIN_MESSAGE);
new server().setVisible(true);
setVisible(false);
} catch(Exception e1){e1.printStackTrace();}
答案 0 :(得分:1)
在用于设置变量之前,应创建预准备语句。正如评论者所说,您需要将准备好的语句创建移至之前设置变量。
重构您的代码:
try{
String sql="update inventory set Name=?,Category=?,Brand=?,Price=?,ExDate=?,Tags=?,Quantity=?,Barcode=? where Id=?";
pst=con.prepareStatement(sql);
pst.setString(2, textField.getText());
pst.setString(3, textField_1.getText());
pst.setString(4, textField_2.getText());
pst.setString(5, textField_3.getText());
pst.setString(6, textField_4.getText());
pst.setString(7, textField_5.getText());
pst.setString(8, textField_9.getText());
pst.setString(9, textField_6.getText());
pst.setString(1, textField_8.getText());
pst.executeUpdate();
JOptionPane.showMessageDialog(null,"Updating Item Successful","Updated",JOptionPane.PLAIN_MESSAGE);
new server().setVisible(true);
setVisible(false);
}
catch(Exception e1)
{
e1.printStackTrace();
}
finally
{
pst.close();
}
答案 1 :(得分:1)
基于documentation,这里需要注意的事情。
你的sql包含 name att索引1.所以当你尝试更新这个列时,你应该使用相同的索引。像这样的东西:
pst.setString(1, textField.getText());
您始终在调用setString方法。虽然看起来某些列可能是 int 类型或其他类型。例如,您的'id'列应设置为:
pst.setInt(9, Integer.parseInt(textField_8.getText())); (notice that I have changed the index as well.)
正如我之前在评论中提到的那样,您应该将pst=con.prepareStatement(sql)
移到顶部。 (在你的字符串声明之后。)