2017-07-07 231 views
0

所以我有这段代码。 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(); 
    } 
} 

它建立成功地,但在我的数据库改变不了什么。

+1

您的第一段代码不会编译。你至少错过了一个分号,如果你想正确缩进它,阅读代码会更容易。接下来,您应该隔离哪部分代码实际上存在问题。 dbExecuteUpdate是否独立运行?接下来,停止构建像那样的SQL - 而是使用参数化的SQL。您当前的代码容易受到SQL注入攻击(以及其他问题)的影响。 –

+0

你的提交地点在哪里? – user7294900

+0

我可能在这里丢失了一些缩进和分号复制我的代码。一切都在NetBeans中编译。 dbExecuteUpdate的作品。我想像在两个循环中工作,这就是我的问题。我将改为参数化sql。 –

回答

0

可能是你有autoCommit设置为false?确保在你的databaseConnect()上,或者为了快速测试,最后执行一个Commit。

0
//Declare a UPDATE statement 
    String updateStmt 
      = "UPDATE Students SET sagsbehandling='Optaget' WHERE cprnr ='" + CPR + "' AND prio='" + prio + "' AND eduNumber='" + eduNumber + "';"; 

范围updateStmtsetAssignedStudentsAdmitted方法内。那么,你如何在下面的方法调用中传递它?

public static void dbExecuteUpdate(String sqlStmt) 
     throws SQLException, ClassNotFoundException { 
+0

DatabaseController.dbExecuteUpdate(updateStmt); –

+0

这真的不是好的做法,当添加到列表中时调用db – Ravi

+0

我会改为在for循环外执行它 –