このコードセグメントがあります。 searchStudentWith2RUCode()は、StudentオブジェクトのArraylistを返します。 Studentオブジェクトには、GPAなどforename、姓、cprnumber、など様々な属性を持つforeachループ内のループfor java
public void assignStudents() throws ClassNotFoundException, SQLException {
ArrayList<Student> notYetAssignedStudents = searchStudentsWith2RUCode();
ArrayList<Student> assignedStudents = new ArrayList<>()
for (Education edu : eduList) {
for (int i = 0; i < edu.getAmountOfFreeSpacesInEdu(); i++) {
assignedStudents.add(notAssignedStudents.get(i));
setAssignedStudentsAdmitted(assignedStudents.get(i).getCPR, assignedStudents.get(i).getPrio, assignedStudents.get(i).eduNumber)
}
}
}
setAssignedStudentsAdmittedは私のデータベースを更新し、各入院学生に「Optaget」としての私のテーブル「学生」に「sagsbehandling」フィールドを設定する必要があります。しかし、これは動作しません。 私のforループを疑っていますが、私は失われました。なぜ動作しないのか分かりません。ここで
は私setAssignedStudentsAdmitted方法であって、
public void setAssignedStudentsAdmitted(String CPR, int prio, int eduNumber) throws ClassNotFoundException, SQLException {
//Declare a UPDATE statement
String updateStmt
= "UPDATE Students SET sagsbehandling='Optaget' WHERE cprnr ='" + CPR + "' AND prio='" + prio + "' AND eduNumber='" + eduNumber + "';";
//Execute UPDATE operation
try {
DatabaseController.dbExecuteUpdate(updateStmt);
} catch (SQLException e) {
System.out.print("Error occurred while DELETE Operation: " + e);
throw e;
}
}
}
そしてここsetAssignedStudentsAdmitted
public static void dbExecuteUpdate(String sqlStmt) throws SQLException, ClassNotFoundException {
//Declare statement as null
Statement stmt = null;
try {
//Connect to DB (Establish Postgres Connection)
databaseConnect();
//Create Statement
stmt = conn.createStatement();
//Run executeUpdate operation with given sql statement
stmt.executeUpdate(sqlStmt);
} catch (SQLException e) {
System.out.println("Problem occurred at executeUpdate operation : " + e);
throw e;
} finally {
if (stmt != null) {
//Close statement
stmt.close();
}
//Close connection
databaseDisconnect();
}
}
に呼び出された私のdbExecuteUpdate方法では正常に構築し、私のデータベースには何も変化しません。
最初のコードはコンパイルされません。あなたは少なくともセミコロンがないので、コードを正しくインデントするとコードを読みやすくなります。次に、コードのどの部分が実際に問題があるのかを特定する必要があります。 'dbExecuteUpdate'は単独で動作しますか?次に、そのようなSQLの構築をやめてください。代わりにパラメータ化されたSQLを使用してください。あなたの現在のコードは、SQLインジェクション攻撃に対して脆弱です(他の問題もあります)。 –
あなたのコミットはどこですか? – user7294900
ここで私のコードをコピーするインデントとセミコロンが失われている可能性があります。すべてがネットビーンでコンパイルされます。 dbExecuteUpdateは機能します。私のようなループの2つの作業を想像している私の問題です。代わりにSQLをパラメータ化する作業をします。 –