我想创建一个方法,使用ResultSet从数据库中返回结果集并封装到List中,然后将List传递到Servlet中,再使用JSTL显示到前台页面。但是不知为什么ResultSet只能得到数据库中的第一行数据,如何才能返回数据库中的全部结果呢?
从数据库中返回结果集的代码如下:
[code="java"]
// 抽象出从数据库查询所有数据的方法
public static List getOracleFindAll() throws Exception {
Connection conn = JDBC_Connection.getOracleConnection();
String sql = "SELECT * FROM T_CHALIEZHOU_REGISTER";
Statement stmt = conn.createStatement();
// 返回结果集
ResultSet rs = stmt.executeQuery(sql);
//建立两个泛型容器
List<User> lstuser = new ArrayList<User>();
User user = new User();
if(rs != null){
while (rs.next()) {
user.setUsername(rs.getString("t_username"));
user.setUseridtype(rs.getString("T_USERIDTYPE"));
user.setUserid(rs.getString("T_USERID"));
user.setSex(rs.getString("T_SEX"));
user.setDate(rs.getString("T_BIRTHDAY"));
user.setIdencode(rs.getString("T_IDENCODE"));
lstuser.add(user);
}
}
return lstuser;
}
[/code]
Servlet代码如下:
[code="java"]
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
List<User> lst2 = DB_Operation.getOracleFindAll();
request.setAttribute("lst2", lst2);
} catch (Exception e) {
e.printStackTrace();
}
// 重定向页面
//String path = request.getContextPath();
this.getServletContext().getRequestDispatcher("/registerlist.jsp")
.forward(request, response);
}
[/code]
表现层JSTL代码如下:
[code="java"]
<c:forEach items="${ lst2 }" var="user">
<tr align="center">
<td align="center">${ user.username }</td>
<td align="center">${ user.useridtype }</td>
<td align="center">${ user.userid }</td>
<td align="center">${ user.sex }</td>
<td align="center">${ user.date }</td>
<td align="center">${ user.idencode }</td>
</tr>
</c:forEach>
</table>
</c:if>
</td>
[/code]
真实姓名 | 证件类型 | 证件号码 | 性别 | 出生日期 | 验证码 |
---|
[color=blue]
[b]
你的输出应该是,条数正确,但是内容都是同一条。
错误在于你的while循环体中,至始至终使用都是同一个User对象。所以导致list中所有的记录的内容相同。
改为如下形式:[/b][/color]
[code="java"] List lstuser = new ArrayList();
User user = null;
if(rs != null){
while (rs.next()) {
user = new User();
user.setUsername(rs.getString("t_username"));
user.setUseridtype(rs.getString("T_USERIDTYPE"));
user.setUserid(rs.getString("T_USERID"));
user.setSex(rs.getString("T_SEX"));
user.setDate(rs.getString("T_BIRTHDAY"));
user.setIdencode(rs.getString("T_IDENCODE"));
lstuser.add(user);
} [/code]
创建User写在循环里面:
[code="java"]
while (rs.next()) {
User user = new User();
...
lstuser.add(user);
}
[/code]
只有一个user实例,可不就一个呢:)
User user = new User(); 应该放在循环体里面..
不过如果不放里面的话, 也应该是[b]多条重复[/b]的记录呀..
是不是数据库里就是一条数据?
在循环体内打印测试一下
//建立两个泛型容器
List<User> lstuser = new ArrayList<User>();
if(rs != null){
while (rs.next()) {
User user = new User();
user.setUsername(rs.getString("t_username"));
user.setUseridtype(rs.getString("T_USERIDTYPE"));
user.setUserid(rs.getString("T_USERID"));
user.setSex(rs.getString("T_SEX"));
user.setDate(rs.getString("T_BIRTHDAY"));
user.setIdencode(rs.getString("T_IDENCODE"));
lstuser.add(user);
}
}
return lstuser;
}
你的循环没处理好撒,楼上的都说到点子上了