jdbc error参数索引超出范围(2>参数个数,即1)

时间:2013-03-25 14:27:56

标签: java jdbc

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

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

它在prepareStatement.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();
                    }
}

2 个答案:

答案 0 :(得分: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();

你在SQ​​L

上调用它
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();

答案 1 :(得分:0)

您正在为两个不同的SQL语句使用相同的预准备语句。并且参数的数量也不同。这就是你得到这个错误的原因。

尝试以下

如果(allocationProb == 0){ P = 1;  preparedStatement = dbConnection.prepareStatement(sql);

希望有所帮助