学生がクラスに登録する前にクラスがいっぱいになっているかどうかを確認するために実行できるコードがあります。私は、文字列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!");
}
}
classFullCheckでは、2つの文字列を比較しています。クエリ文字列ではなく数字の比較を行うには、結果セットから値を取得する必要があります。 – user2260040