【问题标题】:jdbc error Parameter index out of range (2 > number of parameters, which is 1) [duplicate]jdbc错误参数索引超出范围(2>参数数量,即1)[重复]
【发布时间】:2013-03-25 14:27:55
【问题描述】:

我写了下面的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();
                    }
}

【问题讨论】:

  • 你使用的prepared statement是针对只有一个参数的SQLsql="SELECT allocationProb FROM trial.teacherallocation where TeacherID=?;";

标签: java jdbc


【解决方案1】:

虽然你改变了你的 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();

【讨论】:

  • 如果任何答案有帮助,您可以点赞和/或接受一个。
  • @user2094670:如果您认为 Sotirios 的回答有帮助,我建议您接受并投票。
【解决方案2】:

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

尝试关注

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多