for循环内的foreach循环java
所以我有这段代码。 searchStudentWith2RUCode()返回Student对象的Arraylist。 Student对象有不同的属性,如用的名字,姓氏,cprnumber,GPA等for循环内的foreach循环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更新我的数据库,并应在每个录取的学生设置我的表中的“学生”“sagsbehandling”为“Optaget”领域。然而这不起作用。 林怀疑我的循环,但我输了,我不明白为什么它不起作用。
这里是我的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我dbExecuteUpdate方法
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();
}
}
它建立成功地,但在我的数据库改变不了什么。
可能是你有autoCommit设置为false?确保在你的databaseConnect()上,或者为了快速测试,最后执行一个Commit。
//Declare a UPDATE statement
String updateStmt
= "UPDATE Students SET sagsbehandling='Optaget' WHERE cprnr ='" + CPR + "' AND prio='" + prio + "' AND eduNumber='" + eduNumber + "';";
范围updateStmt
是setAssignedStudentsAdmitted
方法内。那么,你如何在下面的方法调用中传递它?
public static void dbExecuteUpdate(String sqlStmt)
throws SQLException, ClassNotFoundException {
DatabaseController.dbExecuteUpdate(updateStmt); –
这真的不是好的做法,当添加到列表中时调用db – Ravi
我会改为在for循环外执行它 –
您的第一段代码不会编译。你至少错过了一个分号,如果你想正确缩进它,阅读代码会更容易。接下来,您应该隔离哪部分代码实际上存在问题。 dbExecuteUpdate是否独立运行?接下来,停止构建像那样的SQL - 而是使用参数化的SQL。您当前的代码容易受到SQL注入攻击(以及其他问题)的影响。 –
你的提交地点在哪里? – user7294900
我可能在这里丢失了一些缩进和分号复制我的代码。一切都在NetBeans中编译。 dbExecuteUpdate的作品。我想像在两个循环中工作,这就是我的问题。我将改为参数化sql。 –