2016-03-20 4 views
-1

学生がクラスに登録する前にクラスがいっぱいになっているかどうかを確認するために実行できるコードがあります。私は、文字列currentNumberInClassでclassFullCheck()関数を作成しました。これは、sqlテーブルからカウントを取り出し、別のテーブルからclass_sizeと比較します。私はおそらく、カウント(*)番号の代わりにclass_idを返すと思うので、これは適切に機能していません。私はまた、このチェックが正しく動作するように、addClass()関数にclassFullCheck()関数を挿入する場所が不明です。JavaでのSQLの戻り値(*)の値

アドバイスをいただければ幸いです!

あなたは1で、このクエリを行うことができますclassFullCheckに2つのクエリを() 行う必要はありません
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

classFullCheckでは、2つの文字列を比較しています。クエリ文字列ではなく数字の比較を行うには、結果セットから値を取得する必要があります。 – user2260040

答えて

0

"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 

current_student_count < class_sizeあなたはクラスで行われています。 しかし、より良い解決策は、class_size> current_student_countが選択肢1を行う生徒数のプリントリストクラスです。

0

java jdbcでは、次のようにsqlから返された結果を取得します。

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; 
}