Таблица не показывает значения из MySQL - сервлеты и JSP - PullRequest
0 голосов
/ 23 мая 2018

Я новичок в этом, каждый день узнаю что-то новое о jsp, сервлетах и ​​т. Д., Я настроил все, чтобы показать всех моих пользователей из моей базы данных в таблице в браузере, а затем просто кнопку, которая будетизмените только 1 значение этого, поэтому мне удалось это сделать.

My AdminPanel.jsp (где я настроил свою таблицу, чтобы показать все записи из базы данных)

  <form action="AdminPanel" method="get">

  <table style="width:100%">
      <caption>Usuarios Registrados</caption>

      <tr>
    <th>Nombre</th>
    <th>Apellido</th>
    <th>Usuario</th>
    <th>Estado</th>
    <th>Habilitar</th>
  </tr>

   <tr>

    <c:forEach var="row" items="${memberList}">

    <tr>
        <td><c:out value="${row.firstname}"/> </td>
        <td><c:out value="${row.lastname}"></c:out> </td>
        <td><c:out value="${row.username}"></c:out> </td>
        <td><c:out value="${row.type}"></c:out> </td>
        <td><a href="AdminPanel.jsp" name="Edit">Habilitar usuario</a> </td>
    </tr>
</c:forEach>
  </tr>

</table>
        </form> 

Теперь у меня есть userDAO, который подключается к базе данных и настраивает значения для userBean (мой класс pojo со всеми установщиками и получателями имени, фамилии и т. Д.)

UserDAO.java

  public static UserBean adminPanel(UserBean bean) {

         //preparing some objects for connection 
         Statement stmt = null;    

         String firstname = bean.getFirstName();
         String lastname = bean.getLastName();
         String username = bean.getUsername();
         int tipo = bean.getType();

            String searchQuery =
               "select firstname,lastname,username,tipo from idusuario";

      // Tracing the process
      System.out.println("Nombre:  " + firstname);          
      System.out.println("Apellido: " + lastname);  
      System.out.println("Usuario: "+username);
      System.out.println("Estado Usuario :" + tipo);  
      System.out.println("Query Panel Admin :" + searchQuery);  

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            System.out.println("Error al cargar el driver");
            System.out.println(ex.getMessage());
        }

      try 
      {
         //connect to DB 
         currentCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/usuarios", "root", "admin");
         stmt=currentCon.createStatement();
         rs = stmt.executeQuery(searchQuery);   
         boolean more = rs.next();

         // if user does not exist set the isValid variable to false
         if (!more) 
         {
            System.out.println("Para poder utilizar el sistema debe registrarse");
            bean.setValid(false);
         } 

      } 

      catch (Exception ex) 
      {
         System.out.println("Error logueandose, posible problema de conexion de base de datos " + ex);
      } 
   } 

} 

И мой AdminPanel.java сервлет

 @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {



         ArrayList<UserBean> member= new ArrayList<UserBean>();
        try {
            while(rs.next()) {
                UserBean user = new UserBean();
                user = UserDAO.adminPanel(user);
                user.setFirstName(rs.getString("firstname"));
                user.setLastName(rs.getString("lastname"));
                user.setUserName(rs.getString("username"));
                user.setType(rs.getInt("type"));
                member.add(user);
                request.setAttribute("memberList", member);
            }       } catch (SQLException ex) {
            Logger.getLogger(AdminPanel.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

Результаты, которые я хочу получить в своей базе данных (с запросом SELECT firstname,lastname,username,tipo,admin from idusuario)

enter image description here

Теперь в моем выводе ничего не отображается, запрос верный. Я проверил его с помощью mysqlworkbench, и он отображает результаты, которые я хочу, у меня естьизвлекли данные и сохранили их, но я не знаю, почему ничего не показываетМомент.

Это мой вывод

enter image description here

Мой rs также извлечен из userDAO, в моем импорте

import static com.login.UserDAO.rs;  (resultSet)

1 Ответ

0 голосов
/ 23 мая 2018

Важно отделить логику вашей базы данных от сервлета, это значительно облегчает управление.Также полезно создать отдельный класс для соединения с базой данных.Причина, по которой вы не получаете никаких результатов, заключается в том, что в вашем классе UserDao вы не получаете никаких результатов из ResultSet.

Создайте класс для подключения к вашей базе данных.Мы можем обратиться к этому в любое время, когда мы хотим получить доступ к базе данных.

public class DBConnection {
    private static String url = null;
    private static Connection conn = null;
     public static Connection getConnection(){
     try{

       Class.forName("com.mysql.jdbc.Driver");
       url = "jdbc:mysql://localhost:3306/usuarios";

     conn = DriverManager.getConnection(url,"root","admin");
     }   catch (Exception e) {
            System.out.println(e);
        } 
     return conn;
     }
}

и наш метод adminPanel из класса UserDao:

    //Now we can use this like this, i looked at your code and saw you wanted to have a list of UserBean objects.. we can do that like this:
public List<UserBean> adminPanel(){
    ArrayList<UserBean> users = new ArrayList<UserBean>();
    //get connection from our DBConneciton class we created earlier
    try(Connection conn= DBConnection.getConnection()){
    //create our sql statement
   PreparedStatement pst = conn.prepareStatement("select firstname,lastname,username,tipo from idusuario;"); 
         //execute query
         pst.executeQuery();   
       //now get results
    ResultSet rs = pst.executeQuery();
      //while ResultSet has results
     while (rs.next()) {
    //create new user object to hold the info in
    UserBean user = new UserBean();
    //get the results from resultset     
    String firstname = rs.getString(1);
    String lastname = rs.getString(2);
    String username = rs.getString(3);
    int type = rs.getInt(4);
    //set results to user object
    user.setFirstName(firstname);
    user.setLastName(lastname);
    user.setUserName(username);
    user.setType(type);

    users.add(user); //add userobject to list of userobjects

      }

        } catch (SQLException e) {
            e.printStackTrace();
        }
     //we don't need to close our db connection because the try statement does it for us   
return users; //return list of users
}   

Теперь для доступа к этому все, что нам нужно сделать в нашем сервлете, это:

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

          UserDAO u = new UserDAO(); //instantiate class

       //get our list of users
     List<UserBean> users = u.adminPanel();
       //set our list to request
     request.setAttribute("memberList", users);

     //forward to jsp page
        RequestDispatcher rs = request.getRequestDispatcher("AdminPanel.jsp");
            rs.forward(request, response);


    }

все на вашем jsp выглядит нормально, поэтому должно работать, дайте мне знать, если у вас есть какие-либо вопросы или проблемы

РЕДАКТИРОВАТЬ: некоторые идеи отладки:

В вашем сервлете сделайте эточтобы увидеть, насколько велик ваш список пользователей:

...
//get our list of users
List<UserBean> users = u.adminPanel();
 //check if we are actually getting something from the database
 System.out.println(users.size());

Если размер равен 0, то это означает, что с нашим запросом что-то не так.Проверьте, получаете ли вы что-нибудь из своей базы данных, если вы вручную запрашиваете в базе данных следующий запрос:

select firstname,lastname,username,tipo from idusuario;

РЕДАКТИРОВАТЬ 2

Попробуйте удалить <c:out tags:

  <c:forEach var="row" items="${memberList}">
    <tr>
        <td>${row.firstname}</td>
        <td>${row.lastname}</td>
        <td>${row.username}</td>
        <td>${row.type}</td>
        <td><a href="AdminPanel.jsp" name="Edit">Habilitar usuario</a> </td>
    </tr>
</c:forEach>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...