2016-03-23 14 views
0

私は以下の関数を持っています。クラスに登録された受講者の数をクラスmaxと比較しようとしています。登録された番号がクラスmaxより大きい場合は、「Class if Full」というメッセージを返したいと思います。2つのintを比較するjava/sql

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

私はこのようなaddClass()関数にclassFullcheck()関数を挿入しています:私は現在、ちょうどクラスが満杯でない場合でも、プリントアウトの両方のメッセージを取得しています

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()) { 
       classFullCheck(); 
       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!"); 
     } 
    } 

。どんな提案も大いに役立ちます。

はまたrsです...私はResultSetは0ベースとは思わない

currentNumberInClassAsInt = rs.getInt(**1**); 

currentNumberInClassAsInt = rs.getInt(2); 

の代わり:

if (currentNumberInClassAsInt >= classSizeAsInt) { 
      String updateStatus = "Update ClassSelector.classes SET status = ? WHERE class_id = " + selectedClass; 
      PreparedStatement pStmt = con.prepareStatement(updateStatus); 
      pStmt.setString(1, "Closed"); 
      pStmt.executeUpdate(); 

      System.out.println("Sorry, this class is Full! Select a different Class:"); 
      System.out.println("\nSign Up For a Class\n"); 
      addClass(); 
     } 
+0

'SQLException'のスタックトレースを' addClass'に表示する方がよいでしょう。 – Berger

+0

良いアイデア、それは "クラス名"は文字列innerJoin行に見つかりませんでした –

+0

@ J.Doeは私の答えをチェックアウト... – brso05

答えて

0

私はあなたがこれをしたいと思いますあなたが変更しているように見えるので、グローバル変数ResultSet電話番号classFullCheck()に電話するとになります。セットあなたの結果にrs = myStmt.executeQuery("SELECT * FROM ClassSelector.classes WHERE class_id = " + selectedClass);いますが、classFullCheck()rsを変更する:あなたは

rs = myStmt.executeQuery("SELECT * FROM ClassSelector.classes WHERE class_id = " + selectedClass); 
while (rs.next()) { 
    classFullCheck();//****************result set changed here****************** 
    String innerJoin = (userEnterIdAsName + " has been added to " + rs.getString("class_name") + " " + rs.getString("class_id")); 

は、あなたがこれを持っていると思うことがあります...あなたは ResultSetで行う考えを持っていないかもしれません。他のクエリを実行してもデータにアクセスできるように、別のオブジェクトにデータを格納することができます。

+0

ありがとうこれは参考になります。あなたはresultSetを変更することはどういう意味ですか? –

+0

あなたの結果セットに 'SELECT * FROM ClassSelector.classes WHERE class_id =" + selectedClass "の代わりにSELECT class_size FROM ClassSelector.classes WHERE class_id =" + selectedClass); "を' classFullCheck() 'で実行すると、 'SELECT * FROM ClassSelector.classes'は' class_name'を持ちます( 'SELECT *'と仮定しています)。 'rs.'に' class_name'フィールドはありません。+ rs.getString( "class_name") '行に追加されました。 – brso05

+0

@ J.Doeそれが助けてくれることを願っていますか? – brso05