如何使用servlet和jsp显示数据库表的所有列

时间:2014-08-08 07:43:34

标签: java mysql jsp servlets

我有一个包含列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();
        } 
    }
}

2 个答案:

答案 0 :(得分:0)

在迭代器中调用.next()后,指针移动到下一个元素。由于您使用Integer id = (Integer)lr.next();调用了ID。指针将移动到列表中的下一个值。因此,如果您尝试在<td><%=lr.next()%></td>中打印ID,则不会。相反,它会打印出名称。

相反,您可以使用以下

更改您的jsp
Integer 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 listobject-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...
}