Arraylist的一个问题,从数据库拿到多组数据但是只能读出一组

这是数据库select方法public List getgameperson() {
// TODO Auto-generated method stub

    List<Gameperson> list = new ArrayList<Gameperson>();
    Connection conn = null;
    Statement  st = null;
    ResultSet  rs = null;
    try {
        conn = DBO.getconnection();
        st =(Statement) conn.createStatement();
        String  sql = "select *  from gameperson";
        rs = (ResultSet) st.executeQuery(sql);
        if(rs.next()){
            Gameperson gp = new Gameperson();
            gp.setId(rs.getInt("id"));
            gp.setCompetitorId(rs.getInt("competitorId"));
            gp.setGameId(rs.getInt("gameId"));

            list.add(gp);
        }

    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }finally{
        DBO.close(st, rs, conn);
    }
    return list;
}
这是拿出方法:
<%

List list = new ArrayList();
GamepersonDao gpo = new GamepersonDaoImpl();
list = gpo.getgameperson();
if(list!=null){
for (int i=0;i<list.size();i++){
Gameperson gp = list.get(i);

%>

<%=gp.getId()%>


<%=gp.getGameId() %>


<%=gp.getCompetitorId()%>


<%
}
} %>
现在数据库有很多组数据,但是为什么页面只能显示遍历一组??
新手求大神解答
 public List getgameperson() {
 // TODO Auto-generated method stub
    List<Gameperson> list = new ArrayList<Gameperson>();
    Connection conn = null;
    Statement  st = null;
    ResultSet  rs = null;
    try {
        conn = DBO.getconnection();
        st =(Statement) conn.createStatement();
        String  sql = "select *  from gameperson";
        rs = (ResultSet) st.executeQuery(sql);
       while(rs.next()){
            Gameperson gp = new Gameperson();
            gp.setId(rs.getInt("id"));
            gp.setCompetitorId(rs.getInt("competitorId"));
            gp.setGameId(rs.getInt("gameId"));

            list.add(gp);
        }

    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }finally{
        DBO.close(st, rs, conn);
    }
    return list;
}

rs.next那行,把if改成while

你检查下,是不是代码设计方式不对。我看不出你这个读出来的是二维数组的。

下面是JSP 之前写的几组list都能完整的读取数据库信息,就是这个有问题。


<%
List list = new ArrayList();
GamepersonDao gpo = new GamepersonDaoImpl();
list = gpo.getgameperson();
if(list!=null){
for (int i=0;i<list.size();i++){
Gameperson gp = list.get(i);

%>

<%=gp.getId()%>


<%=gp.getGameId() %>


<%=gp.getCompetitorId()%>


<%
}
} %>
<%
GameDao go = new GameDaoImpl();
List<Game>  list1 = new ArrayList();
list1= go.getgame();
if(list1!=null){
for(int i=0;i<list1.size();i++){
Game g = list1.get(i);

 %>
 <p><%=g.getGamename() %></p>
  <p><%=g.getId() %>
 <%}
 } %>

同样的创建方法和过程,但是下面的可以显示所有数据,上面的只能显示一组数据

把查询数据库方法中的i换成while就行了

int i=0;
while(i<list.size()){
Gameperson gp = list.get(i);
i++;
这样么?
还是只有一组数据出现

在jsp中List定义也要这么定义 List list = new ArrayList();

首先,ArrayList拿值的过程是没有问题的,问题在于你查数据库后,从返回的结果集中取数据时,你用了if(rs.next){....}这里不会循环去往集合中赋值。
这里只会放入一条结果。应该将if改为while这样才是循环的过程。

循环那个地方写错了,把if改成while就好了!

        if(rs.next()){
        Gameperson gp = new Gameperson();
        gp.setId(rs.getInt("id"));
        gp.setCompetitorId(rs.getInt("competitorId"));
        gp.setGameId(rs.getInt("gameId"));

        list.add(gp);
    }
            这一句有问题的,即使查出来的数据有多条,list也只会添加一条记录,因为循环语句体只执行一次。