2016-03-16 114 views
0

我试图从数据库中检索数据并使用JSP在表格中显示它。从数据库读取数据并存储在数组列表中,但数组列表显示为空

问题是当我做query.list()它返回null。

db中有10条记录。

如何检索所有记录?

下面是我的DTO

public class TaskDAO { 
    @SuppressWarnings("unchecked") 
    public List<Task> getUserTasks(String userName) { 
     // Task task = getTasksByUserName(userName); 
     Configuration configuration = new Configuration().configure(); 
     SessionFactory sessionFactory = configuration.buildSessionFactory(); 

     Session session = sessionFactory.openSession(); 
     Transaction transaction = null; 
     List<Task> task = new LinkedList<Task>(); 
     try { 
      transaction = session.getTransaction(); 
      transaction.begin(); 
      Query query = session.createQuery("select id, taskDescription from Task where USERNAME='" 
        + userName + "'"); 
      task = query.list(); 
      transaction.commit(); 

     } catch (Exception e) { 
      if (transaction != null) { 
       transaction.rollback(); 
      } 
      e.printStackTrace(); 
     } finally { 
      session.close(); 
     } 

     return task; 

    } 

} 

下面是我的JSP

<%@page import="java.util.Iterator"%> 
<%@page import="com.sk.app.dto.Task"%> 
<%@page import="java.util.List"%> 
<%@page import="com.sk.app.controller.Success"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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>Home Page</title> 
</head> 
<body> 
<h2>Tasks</h2> 
<table> 
<% 
List tasks = (List)request.getAttribute("taskList"); 
Iterator iterator = tasks.iterator(); 
while (iterator.hasNext()){ 
    Task currentTask = (Task) iterator.next();%> 

    <tr> 
     <td> <%=currentTask.getId()%></td> 
     <td> <%=currentTask.getTaskDescription()%></td> 
    </tr> 
    <%} %> 
</table> 

下面是我的Servlet

public class Success extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     String userName = request.getParameter("userName"); 
     try { 
      TaskDAO taskDAO = new TaskDAO(); 

      List<Task> taskList = taskDAO.getUserTasks(userName); 

      request.setAttribute("taskList", taskList); 
      Iterator<Task> iterator = taskList.iterator(); 
      int count = 0; 
      while (iterator.hasNext()){ 
       count ++; 
      } 
      System.out.println(count); 
      RequestDispatcher requestDispatcher = request 
        .getRequestDispatcher("task.jsp"); 

      requestDispatcher.forward(request, response); 
     } catch (Exception e) { 

      e.printStackTrace(); 
     } 

    } 
} 

下面是我的任务DTO

public class Task { 
    private int id; 
    private String taskDescription; 
    private String USERNAME; 
    public String getUserName() { 
     return USERNAME; 
    } 
    public void setUserName(String userName) { 
     this.USERNAME = userName; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getTaskDescription() { 
     return taskDescription; 
    } 
    public void setTaskDescription(String taskDescription) { 
     this.taskDescription = taskDescription; 
    } 
    @Override 
    public String toString() { 
     return "Task [id=" + id + ", taskDescription=" + taskDescription 
       + ", USERNAME=" + USERNAME + "]"; 
    } 


} 

当我调试的程序是这样的结果我得到的检查task = query.list();debug

下面的图片是表结构,username列是外键的用户表。 table

+0

使用transaction = session.beginTransaction();这是一个巨大的集合 “不这样做” S。不要使用scriptlet,不要使用字符串粘贴来生成查询,不要手写事务管理或DAO,也不要手动编写servlet。我可以用Spring中的10行代码和10行HTML模板代替整个代码。 – chrylis

+0

@chrylis我对此很陌生,从零开始学习。试图实现我学到的东西。 –

回答

1

显然,您没有从数据库中获取任何数据,因为您的HQL不正确。你需要得到所有Task

Query query = session.createQuery("from Task where USERNAME='" 
        + userName + "'"); 

检查你的财产USERNAME。它必须是一个持久化的类属性,而不是数据库列!

只是代替

transaction = session.getTransaction(); 
transaction.begin(); 

使用List<Task> task = null;代替

List<Task> task = new LinkedList<Task>(); 
+0

仍然一样,返回null。 –

+0

@ShashiKiran做这个'System.out.println(session.createQuery(“从任务,其中用户名='3'”)。列表());' –

+0

这是我得到的'[com.sk.app。 [email protected]7a87274f,[email protected],[email protected],[email protected],com.sk.app.dto。任务@ 5911b388]' 这不正确的权利? –

相关问题