Как правильно вернуть массив, который отображает данные на основе идентификатора пользователя? - PullRequest
0 голосов
/ 21 марта 2019

Мне удалось правильно отобразить массив списков, который отображает все данные в моей базе данных MySQL, однако у меня возникают проблемы с отображением данных на основе идентификатора пользователя.

Вот мой код:

CreditsServlet.java

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.java

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 голос
/ 21 марта 2019

Намного проще, чем вы думаете:

Сначала исправьте 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

  ...

}

Тогда вы можете просто использовать результирующий список в сервлете:

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 области запроса.
  • Наконец, перенаправляетна новой странице результатов, которая будет отображать кредиты.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...