无法得到预期的结果

时间:2016-04-08 13:18:21

标签: java

这是我需要在我的项目中实现的编码,当我在我的servlet中调用方法getClassId()时,它返回表中的第一个值,但是表包含许多记录。当我使用System.out.println(rs.getString(clId)) ;getClassId()方法显示正确的输出。我只能说,当我在rs.getString()中拨打getClassName()时,它只会通过getClassId()进行一次迭代。

public List<String> getClassId() {
    Statement stmt = null;
    List<String> stList = new ArrayList<String>();

    try {
        Con = conManager.getConnection();
        stmt = Con.createStatement();
        String query = "SELECT * FROM classes";
        rs=stmt.executeQuery(query);

        while(rs.next()) {
            stList = getClassName(rs.getString(clId));

        }
    } catch(Exception e) {
        System.out.println(e);
    }
    return stList;
}

public String getClassName(String id) {
    String str = "";
    Statement stmt = null;

    try {
        Con = conManager.getConnection();
        stmt = Con.createStatement();
        String query = "SELECT * FROM classes where clId="+id;
        rs=stmt.executeQuery(query);
        while(rs.next()) {
            str = rs.getString("className");
        }
    } catch(Exception e) {
        System.out.println(e);
    }
    return str;
}

1 个答案:

答案 0 :(得分:1)

此处的getClassName()方法返回数据库结果集中找到的最后一行中的className值:

while(rs.next()){ str = rs.getString("className"); }

显然 str 包含结果集中的最后一个值。

现在getClassId()方法通过迭代传递 clId 的值来调用getClassName(),但是在getClassId()方法中,您将值重新分配给stList,如下所示[即使这应该失败编译为String值的时间不能分配给List数据类型。请检查]:

while(rs.next() ){
  stList = getClassName(rs.getString(clId));
 }

请尝试使用以下代码:

while(rs.next()){
     stList.add(getClassName(rs.getString(clId)));
  }

这会将getclassName()返回的所有值添加到arrayList。

希望有所帮助..