【问题标题】:Reading Data From Database and storing in Array List, but the array list is showing null从数据库中读取数据并存储在数组列表中,但数组列表显示为空
【发布时间】:2016-07-01 23:14:18
【问题描述】:

我正在尝试从 db 中检索数据并使用 JSP 以表格形式显示它。

问题是当我执行 query.list() 时它返回 null。

数据库中有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(); 得到的结果

下图是表结构,用户名列是用户表的外键。

【问题讨论】:

  • 这是一个巨大的“不要那样做”的集合。不要使用 scriptlet,不要使用字符串粘贴来生成查询,不要手写事务管理或 DAO,不要手动编写 servlet。我可以用大约 10 行 Spring 和 10 行 HTML 模板替换你的整个代码。
  • @chrylis 我是新手,从头开始学习。尝试实施我学到的东西。

标签: java mysql hibernate servlets dao


【解决方案1】:

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

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

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

只需使用transaction = session.beginTransaction(); 代替

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

使用List&lt;Task&gt; task = null; 代替

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

【讨论】:

  • 还是一样,返回null。
  • @ShashiKiran 这样做System.out.println(session.createQuery("from Task where username='3'").list());
  • 这是我得到的输出 ' [com.sk.app.dto.Task@7a87274f, com.sk.app.dto.Task@3f25f261, com.sk.app.dto.Task @544bdeaa, com.sk.app.dto.Task@41079622, com.sk.app.dto.Task@5911b388] '这不正确吗?
  • 我创建了 toString 方法,这是之后的输出 - '[Task [id=1, taskDescription=null, USERNAME=null], Task [id=3, taskDescription=null, USERNAME= null],任务 [id=7,taskDescription=null,USERNAME=null],任务 [id=9,taskDescription=null,USERNAME=null],任务 [id=10,taskDescription=null,USERNAME=null]]'
  • @ShashiKiran 看起来,您从数据库中获取数据。请在您的问题中添加Task
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2014-07-29
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多