java / sql比较两个整数

时间:2016-03-23 13:11:07

标签: java mysql sql count

我有以下功能,我正在尝试将班级注册的学生人数与班级最大值进行比较。如果注册的数字大于最大类别,我想返回一条消息,上面写着" The Class if Full"。

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

我将classFullcheck()函数插入到addClass()函数中,如下所示:

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

我目前只是打印出两条消息,即使课程未满。任何建议都会有所帮助。

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

1 个答案:

答案 0 :(得分:0)

我想你想要这个:

currentNumberInClassAsInt = rs.getInt(2);

而不是:

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

我不认为ResultSet基于0 ......

rs也是一个全局变量,因为当您致电ResultSet时,您似乎正在更改rs classFullCheck()。您可能没有ResultSet ...

中的想法
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"));

您可能认为结果集中包含rs = myStmt.executeQuery("SELECT * FROM ClassSelector.classes WHERE class_id = " + selectedClass);,但您在rs中更改了classFullCheck()。您可能希望将数据存储在另一个对象中,当您运行另一个查询时,您仍然可以访问该数据。