0

次の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();
                    }
}
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

2 つの異なる SQL ステートメントに対して同じ準備済みステートメントを使用しています。また、パラメータの数も異なります。そのため、このエラーが発生しています。

フォローしてみてください

if(allocationProb==0){ p=1; prepareStatement = dbConnection.prepareStatement(sql);

それが役に立てば幸い

于 2013-03-25T14:30:43.940 に答える