我有一个包含列users
的数据库表id(int),name(string),department(string),password(string)
。我将表内容存储在arrayList
中的servlet (display.java)
对象中,然后将其转发到{{1}页面(jsp
)。但我无法使用该jsp页面显示所有表.Id内容未显示,表的列已向右移动1个单位。即没有正确的标题。
home1.jsp
jsp代码在这里
@WebServlet("/Display3")
public class Display3 extends HttpServlet {
private static final long serialVersionUID = 1L;
public Display3() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Connection conn = null;
Statement st;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/test?user=root&password=Tpg@1234");
ArrayList al=null;
ArrayList userList =new ArrayList();
String query = "select id,name,department,password from users";
st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while(rs.next())
{
al = new ArrayList();
al.add(rs.getInt(1));
al.add(rs.getString(2));
al.add(rs.getString(3));
al.add(rs.getString(4));
userList.add(al);
}
request.setAttribute("userList",userList);
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/home1.jsp");
dispatcher.forward(request,response);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
在迭代器中调用.next()
后,指针移动到下一个元素。由于您使用Integer id = (Integer)lr.next();
调用了ID。指针将移动到列表中的下一个值。因此,如果您尝试在<td><%=lr.next()%></td>
中打印ID,则不会。相反,它会打印出名称。
相反,您可以使用以下
更改您的jspInteger id = (Integer)lr.next();
%>
<tr>
<td><%=id%></td>
<%
while(lr.hasNext())
{
%>
<td><%=lr.next()%></td>
<%
}
答案 1 :(得分:0)
当你施放Integer id = (Integer)lr.next();
时,你正在将迭代器的位置移动一个位置。
方法Iterator#next()自动将迭代器移动一个位置。在你打电话的时候
<td><%=lr.next()%></td>
你从第二个位置开始,遗漏你的身份。
我强烈建议您阅读generics for your array list,object-relational mapping以及最重要的foreach loop。
最重要的是ORM,你应该创建一个POJO java class来包含你的一行表:
public class User {
int id;
String name;
String departament;
String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartament() {
return departament;
}
public void setDepartament(String departament) {
this.departament = departament;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后,您可以迭代结果集并为每一行添加新用户:
//...
List<User> users = new ArrayList<User>();
//...
while(rs.next())
{
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setDepartament(rs.getString(3));
user.setPassword(rs.getString(4));
users.add(user);
}
现在您可以使用
遍历列表for(User user: users){
//Whatever...
}