【问题标题】:How can i display all column of a database table using servlet and jsp如何使用 servlet 和 jsp 显示数据库表的所有列
【发布时间】:2014-08-08 07:43:34
【问题描述】:

我有一个数据库表users 包含列id(int),name(string),department(string),password(string)。我将表内容存储在servlet (display.java) 的arrayList 对象中,然后将其转发到jsp 页面(home1.jsp)。但是我无法使用该 jsp 页面显示所有表格。未显示 ID 内容,并且表格的列已向右移动 1 个单位。即不在正确的标题下。

@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();
        } 
    }
}

jsp代码在这里

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*;" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"       "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Insert title here</title>
        <script language ="javascript">
            function editData(id){
            }
            function deleteData(id){
            }
        </script>
    </head>
    <body>
        <br>
        <table align="center">
        </table>
        <br>

        <table border='1' width='300' cellpadding='1' cellspacing='0'>
        <tr>
            <td colspan=6 align="center"></td>
        </tr>
        <tr>
            <td>Id</td>
            <td>Name</td><td>Department</td>
            <td>Edit</td>
            <td>Delete</td>
        </tr>                       
        <%
            List Li = new ArrayList();
            Iterator  lr;
            if(request.getAttribute("userList")!=null && request.getAttribute("userList")!="")
            {
                List userList =  (ArrayList)request.getAttribute("userList");
                Iterator itr = userList.iterator();
                while(itr.hasNext())
                {
                    Li = (ArrayList)itr.next();
                    lr = Li.iterator();
                    Integer id = (Integer)lr.next();
        %>
        <tr>
        <%  
                    while(lr.hasNext())
                    {
        %>
            <td><%=lr.next()%></td>
        <%
                    }
        %>
            <td><input type="button" name="edit" value="edit" onclick="editData(<%=id%>);" ></td>
            <td><input type="button" name="delete" value="Delete" onclick="deleteData(<%=id%>);"></td>
        </tr>
        <%
                }
            }
        %>
    }
        </table>
    </body>
</html>

【问题讨论】:

  • userList 是一个 ArrayList,所以这是有效的request.getAttribute("userList")!="" 吗?
  • 另外,为什么不使用现有的框架,如 struts、Spring MVC 的条纹?这段代码是 JSP 如此上个世纪
  • 请不要再使用 scriptlet
  • 我是java新手。我不知道 struts 和 Springs。
  • 不要在一个while循环中为同一个ArrayList写两次itr.next(),这可能是the columns of table has been shifted 1 unit right.的原因

标签: java mysql jsp servlets


【解决方案1】:

当您转换 Integer id = (Integer)lr.next(); 时,您会将迭代器的位置移动一个位置。

Iterator#next() 方法自动将您的迭代器移动一个位置。当你打电话时

<td><%=lr.next()%></td>

您从第二个位置开始,省略您的 id。

我强烈建议您阅读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...
}

【讨论】:

    【解决方案2】:

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

    相反,您可以使用以下代码更改您的 jsp

    Integer id = (Integer)lr.next();
            %>
            <tr>
    <td><%=id%></td>
            <%  
            while(lr.hasNext())
            {
    
                %>
                <td><%=lr.next()%></td>
    
                <%
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2016-11-23
      • 2015-04-13
      • 2016-05-02
      相关资源
      最近更新 更多