将一个整数从一个类传递给一个类

时间:2014-09-05 07:05:41

标签: java mysql database

将整数值从一个类传递到另一个类时出现问题。我创建了2个MYSQL表,一个用于存储学生信息,另一个用于"计数器表"。学生表的目的是存储信息和"计数器表"是存储我们有多少学生。之后,我创建了一个方法来从"计数器表中获取整数值"并希望发送到另一个类方法,将值增加1,以便在注册时插入学生表中的新行。例如,我的学生表有5个学生,因此我的计数器表的值为5.当学生想要注册新帐户时,他或她只能填写STD_NAME,STD_TEL和NO将来自方法从表"计数表"中获取整数值然后发送到另一个方法来添加1.所以新学生将在学生表中没有6行。

CLASS FOR COUNTER TABLE


public CounterTable(){

}

public int getCurrentNumber(Connection conn, String table_name){
    int current_no = 0;
    String QUERY = "SELECT * FROM counter_table WHERE TABLE_NAME='" + table_name + "'";
    Statement stmt = null;
    ResultSet rs = null;        
    try {
        stmt = conn.createStatement();
        rs = stmt.executeQuery(QUERY);
        rs.next();
        current_no = rs.getInt("TABLE_NO");
    }       
    catch(SQLException ex){
        ex.printStackTrace();
    }           
    catch( Exception ex){
        ex.printStackTrace();
    }   
    finally{
        try{
            stmt.close();
            rs.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
            ex.getMessage();
        }   
    }
    return current_no;
}

public void updateCounterNumber(Connection conn, String table_name){
    int current_no = 0;
    String QUERY = "UPDATE table_no WHERE TABLE_NAME='" + table_name + "'";
    Statement stmt = null;
    ResultSet rs = null;        
    try {
        stmt = conn.createStatement();
        rs = stmt.executeQuery(QUERY);
        rs.next();
    }       
    catch(SQLException ex){
        ex.printStackTrace();
    }           
    catch( Exception ex){
        ex.printStackTrace();
    }   
    finally{
        try{
            stmt.close();
            rs.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
            ex.getMessage();
        }   
    }

}

}

CLASS FOR STUDENT REGISTER




String std_name = "";
String std_icno = "";
String std_mobile = "";
String std_tel = "";
String std_address = "";
String std_gender = "";
String no = "";
String table_name = "";


public void init(ServletConfig config) throws ServletException {
    super.init(config);
}


public void InsertData(){
    Connection conn = new Database().getConnection();
     PreparedStatement pstmt = null;
     //ResultSet rs = null;      
     try {
          String student ="";
          conn = new Database().getConnection();
          String query = "INSERT INTO student(NO, STD_NAME, STD_ICNO, STD_MOBILE, STD_TEL, STD_ADDRESS, STD_GENDER) values(?,?,?,?,?,?,?)";
          SetNewNumberPlusOne(conn, student, no);
          pstmt = conn.prepareStatement(query); 
          pstmt.setString(1, no);
          pstmt.setString(2, std_name); 
          pstmt.setString(3, std_icno); 
          pstmt.setString(4, std_mobile);
          pstmt.setString(5, std_tel); 
          pstmt.setString(6, std_address); 
          pstmt.setString(7, std_gender);
          pstmt.executeUpdate(); 
          updateCounterNumber(conn, student, no);
       } 

        catch( SQLException ex){
            ex.printStackTrace();
        }
        catch( Exception ex){
            ex.printStackTrace();
        }

        finally{
            try{
                pstmt.close();
                if(conn != null){
                    conn.close();
                }
            }
            catch( SQLException ex){
                ex.printStackTrace();
                ex.getMessage();
            }   
      }
}




public void SetNewNumberPlusOne(Connection conn, String student, String no){
}


private void updateCounterNumber(Connection conn, String student, String no2){

}

}

我遇到的问题是将来自计数器表的current_no值传递给学生注册类的SetNewNumberPlusOne方法

3 个答案:

答案 0 :(得分:1)

在计数器类中创建一个getter方法。然后在需要学生人数时在寄存器类中调用该方法。

答案 1 :(得分:1)

如果您的项目只有1个变量用于此学生数量,您可以将其创建为公共静态变量和类变量,以通过键入NameOfClassThisVariableIsLocated.NameOfVariable或创建Singleton-来从命名空间中的任何类访问它将此变量作为属性的类。 Singleton-class的优点是,您只能创建此类的一个实例,因此您可以使用此变量并确保在代码中的任何位置使用正确的值。 如果您决定使用这两种方法中的一种,则不需要将变量作为参数传递,因为您可以从命名空间的任何位置访问它。

答案 2 :(得分:1)

如果你想从学生班调用CounterTable类方法,首先你需要创建该类的实例给学生班, 然后你可以访问CounterTable类的方法,它将返回计数器,你可以使用它。