这是我需要在我的项目中实现的编码,当我在我的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;
}
答案 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。
希望有所帮助..