问题描述
- Arraylist的一个问题,从数据库拿到多组数据但是只能读出一组
-
这是数据库select方法public List getgameperson() {
// TODO Auto-generated method stubList<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() %>
<%}
} %>
同样的创建方法和过程,但是下面的可以显示所有数据,上面的只能显示一组数据
解决方案五:
<%
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++;
这样么?
还是只有一组数据出现
解决方案八:
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这样才是循环的过程。