有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何正确返回基于用户ID显示数据的arraylist?

我已经能够正确地显示一个arraylist,它显示MySQL数据库中的所有数据,但是我在如何基于用户ID显示数据方面遇到了问题

这是我的密码:

CreditsServlet。爪哇

private void listTrans(HttpServletRequest request, HttpServletResponse response)
        throws SQLException, IOException, ServletException {

    int id = Integer.parseInt(request.getParameter("id"));
    List<Credits> creditlist = OrganizerDao.getAllCredits(id);

    for (Credits credits : creditlist) {
        if (credits.getOrganizerid() == id) {
            request.setAttribute("creditlist", creditlist);
        }

        request.getRequestDispatcher("credits.jsp").include(request, response);
    }
}

任何帮助或指导都将不胜感激。提前谢谢

编辑:CreditsDao。爪哇

public static List<Credits> getAllCredits(int id) throws SQLException {

    List<Credits> creditlist=new ArrayList<>();

    try{
        Connection con= OrganizerDao.getConnection();
        PreparedStatement ps=con.prepareStatement("select users.id AS organizerid, credits.invoiceid, " +
                "credits.amountin AS creditamount, attendees.name AS payee, credits.purpose, gateway.name AS gatewayname " +
                "from users, credits, attendees, gateway where credits.userid=users.id and credits.attendeeid=attendees.id " +
                "and credits.gateway=gateway.id");

        ResultSet rs=ps.executeQuery();
        while(rs.next()){

            Credits credits = new Credits();

            credits.setOrganizerid(rs.getInt("organizerid"));
            credits.setInvoiceid(rs.getInt("invoiceid"));
            credits.setCreditamount(rs.getDouble("creditamount"));
            credits.setPayee(rs.getString("payee"));
            credits.setPurpose(rs.getString("purpose"));
            credits.setGatewayname(rs.getString("gatewayname"));

            creditlist.add(credits);

        }
        con.close();
    }catch(Exception e){e.printStackTrace();}

    return creditlist;

}

共 (1) 个答案

  1. # 1 楼答案

    比你想象的要简单得多:

    首先,修复DAO并使用参数。变化如下:

    public static List<Credits> getAllCredits(int id) throws SQLException {
    
      ...
    
      PreparedStatement ps=con.prepareStatement("select users.id AS organizerid, credits.invoiceid, " +
        "credits.amountin AS creditamount, attendees.name AS payee, credits.purpose, gateway.name AS gatewayname " +
        "from users, credits, attendees, gateway where credits.userid=users.id and credits.attendeeid=attendees.id " +
        "and credits.gateway=gateway.id" +
        " and users.id = ?"); // Added this extra SQL code
      ps.setInt(1, id); // Added this code to use the id parameter
    
      ...
    
    }
    

    然后,您只需在servlet中使用生成的列表:

    private void listTrans(HttpServletRequest request, HttpServletResponse response)
            throws SQLException, IOException, ServletException {
      int id = Integer.parseInt(request.getParameter("id"));
      List<Credits> creditlist = OrganizerDao.getAllCredits(id);
      request.setAttribute("creditlist", creditlist);
      response.sendRedirect("resultpage.jsp");  
    }
    

    此代码:

    • 检索参数id(筛选条件)
    • 检索特定用户的信用
    • 然后将它们放置在请求范围的属性creditlist
    • 它最终重定向到新的结果页面,该页面将显示信用