sql server索引超出范围错误

时间:2014-01-12 15:42:00

标签: java sql-server range

我有这个错误。指数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();}

2 个答案:

答案 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)移到顶部。 (在你的字符串声明之后。)