0

我写了以下java方法,当我调用它时,给了我错误

Parameter index out of range (2 > number of parameters, which is 1).

它在preparedStatement.setInt(2,p) 行给出错误;

for(int t=0;t<2 & exit;t++){
    sql="SELECT allocationProb FROM trial.teacherallocation where TeacherID=?;";
                    preparedStatement = dbConnection.prepareStatement(sql);
                    preparedStatement.setString(1,var1[t]);
                    ResultSet rs3=preparedStatement.executeQuery();
                    rs3.next();
                    int allocationProb=rs3.getInt(1);
                    rs3.close();
                    System.out.println("INSIDE");
                    int p=0;
                    if(allocationProb==0){ 
                        p=1;
                     sql="UPDATE `trial`.`teacherallocation` SET `AllocationSub1`=?,` allocationProb`=? WHERE `TeacherID`=?;";
                     preparedStatement.setString(1,str1);
                     preparedStatement.setInt(2,p);
                     preparedStatement.setString(3,var1[t]);
                     preparedStatement.executeUpdate();
                    }
}
4

2 回答 2

3

虽然你改变了你的sql变量

sql="UPDATE `trial`.`teacherallocation` SET `AllocationSub1`=?,` allocationProb`=? WHERE `TeacherID`=?;";

你不会PreparedStatement用它创造一个新的。所以当你打电话

preparedStatement.setString(1,str1);
preparedStatement.setInt(2,p);
preparedStatement.setString(3,var1[t]);
preparedStatement.executeUpdate();

你在 SQL 上调用它

sql="SELECT allocationProb FROM trial.teacherallocation where TeacherID=?;";

它只有 1 个参数,如果您尝试添加更多参数,则会引发异常。

您需要PreparedStatement在这些行之前创建一个新对象或重新分配一个对象。

sql="UPDATE `trial`.`teacherallocation` SET `AllocationSub1`=?,` allocationProb`=? WHERE `TeacherID`=?;";
preparedStatement = dbConnection.prepareStatement(sql);
preparedStatement.setString(1,str1);
preparedStatement.setInt(2,p);
preparedStatement.setString(3,var1[t]);
preparedStatement.executeUpdate();

此外,您应该在完成所有 jdbc 连接后关闭它们。

preparedStatement.close();

于 2013-03-25T14:32:45.723 回答
0

您对两个不同的 SQL 语句使用相同的准备好的语句。并且参数数量也不同。这就是您收到此错误的原因。

尝试关注

如果(分配概率==0){ p=1; prepareStatement = dbConnection.prepareStatement(sql);

希望能帮助到你

于 2013-03-25T14:30:43.940 回答