我写了以下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();
}
}
答案 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();
你在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();
答案 1 :(得分:0)
您正在为两个不同的SQL语句使用相同的预准备语句。并且参数的数量也不同。这就是你得到这个错误的原因。
尝试以下
如果(allocationProb == 0){ P = 1; preparedStatement = dbConnection.prepareStatement(sql);
希望有所帮助