JDBC误差参数索引超出范围(2>的参数号,它是1)
我写以下Java方法,当我调用它,给我的错误JDBC误差参数索引超出范围(2>的参数号,它是1)
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();
}
}
对两个不同的SQL语句使用相同的准备语句。参数数量也不同。这就是你得到这个错误的原因。
尝试以下
如果(allocationProb == 0){ P = 1;preparedStatement = dbConnection.prepareStatement(sql);
希望它可以帮助
您不能重复使用准备好的语句那样,每个SQL语句应该得到它自己的PreparedStatement。您可以使用预准备语句多次执行一条SQL,但对于不同的SQL语句,您需要从连接中获取新的PreparedStatement。
就像你写的那样,PreparedStatement不知道你改变了sql变量的内容,这就是为什么它会给你提供错误信息。
虽然你改变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();
非常感谢 – irobo 2013-03-25 14:41:20
如果有任何答案是有帮助的,你可以对他们和/或接受一个。 – 2013-03-25 14:42:07
@ user2094670:如果您认为Sotirios的回答很有帮助,我建议您应该接受并注意它。 – 2013-03-25 17:14:59
您使用预处理语句是SQL'SQL = “SELECT allocationProb FROM trial.teacherallocation其中TeacherID = ?;”;'其中只有一个参数。 – 2013-03-25 14:30:16