2016-03-20 5 views
-1

Ich habe einige Code, den ich überprüfen können ausgeführt werden soll, wenn eine Klasse, bevor ermöglicht ein Student voll ist darin zu einschreiben. Ich habe die Funktion classFullCheck() mit einem String currentNumberInClass erstellt, der die Anzahl aus einer sql-Tabelle ermittelt und sie mit class_size aus einer anderen Tabelle vergleicht. Ich denke, dass ich die class_id anstelle der Zahl (*) zurückgebe, also funktioniert das nicht richtig. Ich bin auch nicht sicher, wo die Funktion classFullCheck() in die Funktion addClass() eingefügt werden muss, damit diese Überprüfung ordnungsgemäß funktioniert.return count (*) Wert in SQL mit Java

würde Ratschläge geschätzt!

public static void classFullCheck() { 
     try { 
      String currentNumberInClass = ("SELECT class_id, COUNT(*) FROM ClassSelector.student_x_class WHERE class_id = " + selectedClass); 
      rs = myStmt.executeQuery(currentNumberInClass); 
      String classSize = ("SELECT class_size FROM ClassSelector.classes WHERE class_id = " + selectedClass); 
      rs = myStmt.executeQuery(classSize); 
       if (currentNumberInClass.compareTo(classSize) >= 0){ 
        System.out.println("Sorry, this class is Full!"); 
      } 
     } catch (java.sql.SQLException SQL) { 
      SQL.printStackTrace(); 
     } 
    } 

    public static void addClass() { 

     try { 
      rs = myStmt.executeQuery("SELECT * FROM ClassSelector.classes"); 
      while (rs.next()) { 
       String availableClasses = rs.getString("class_id") + "\t" + rs.getString("class_name") + "\t" + rs.getString("description"); 
       System.out.println(availableClasses); 
      } 
      System.out.println("Enter Class ID from Classes Listed Above to Join: "); 
      selectedClass = sc.nextLine(); 
      rs = myStmt.executeQuery("SELECT * FROM ClassSelector.classes WHERE class_id = " + selectedClass); 
      while (rs.next()) { 
       String innerJoin = (userEnterIdAsName + " has been added to " + rs.getString("class_name") + " " + rs.getString("class_id")); 
       System.out.println(innerJoin); 
       String student_x_classJoin = "INSERT INTO student_x_class" + "(student_id, student_name, class_id, class_name)" + "VALUES (?, ?, ?, ?)"; 
       PreparedStatement pStmt = con.prepareStatement(student_x_classJoin); 
        pStmt.setString(1, user_entered_student_id); 
        pStmt.setString(2, userEnterIdAsName); 
        pStmt.setString(3, rs.getString("class_id")); 
        pStmt.setString(4, rs.getString("class_name")); 
        pStmt.executeUpdate(); 
        System.out.println("Would you like to enroll " + userEnterIdAsName + " into another class? (Y/N)"); 
        String addAdditionalClass = sc.nextLine(); 
        if (addAdditionalClass.equalsIgnoreCase("Y")) { 
         addClass(); 
        } else if (addAdditionalClass.equalsIgnoreCase("N")) { 
         return; 
        } 
       } 
     } 
     catch (java.sql.SQLException SQL) { 
      System.out.println("Wait, This Student is already enrolled in this class!"); 
     } 
    } 
+1

In classFullCheck vergleichen Sie zwei Strings. Sie müssen die Werte aus dem Resultset abrufen, um einen Vergleich der Zahlen anstelle der Abfragezeichenfolge durchzuführen. – user2260040

Antwort

0

Sie brauchen nicht zwei Abfrage in classFullCheck() Sie können diese diese Abfrage durch ein tun:

"SELECT claclass, class_size, (SELECT COUNT(1) 
FROM ClassSelector.student_x_class WHERE class_id = c.class_id) as current_student_count 
FROM ClassSelector.classes c WHERE class_id = " + selectedClass 

Sie Platz in der Klasse, wenn current_student_count < class_size haben. Aber bessere Lösung ist, Druckliste Klassen mit Anzahl der Schüler, wo class_size> current_student_count Wahl eines zu tun.

0

So in java jdbc abrufen Sie das zurückgegebene Ergebnis aus der SQL in der folgenden Art und Weise.

public boolean isClassFull(int classId) { 
    // Sql to get count 
    String classCountSql = "SELECT Count(*) as classCount FROM ClassSelector.student_x_class WHERE class_id = ?;"; 
    // Sql to get max count for a class 
    String classSizeSql = "SELECT class_size as classSize FROM ClassSelector.classes WHERE class_id = ?;"; 
    int classCount = 0; 
    int classSize = 0; 
    try(Connection connection = databaseConnection.getConnection()) { 
     try(PreparedStatement preparedStatement = connection.prepareStatement(classCountSql)) { 
      preparedStatement.setInt(1, classId); 

      try(ResultSet resultSet = preparedStatement.executeQuery()) { 
       if(resultSet.next()){ 
        classCount = resultSet.getInt("classCount"); 
       } 
      } 

     } 
    try(PreparedStatement preparedStatement = connection.prepareStatement(classSizeSql)) { 
      preparedStatement.setInt(1, classId); 

      try(ResultSet resultSet = preparedStatement.executeQuery()) { 
       if(resultSet.next()){ 
        classCount = resultSet.getInt("classSize"); 
       } 
      } 
     } 
    } catch(SQLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return classCount >= classSize; 
}