从数据库中读取数据并存储在数组列表中,但数组列表显示为空
Posted
技术标签:
【中文标题】从数据库中读取数据并存储在数组列表中,但数组列表显示为空【英文标题】: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 我是新手,从头开始学习。尝试实施我学到的东西。 【参考方案1】:显然,您没有从数据库中获取任何数据,因为您的HQL
不正确。你需要得到所有Task
Query query = session.createQuery("from Task where USERNAME='"
+ userName + "'");
检查您的财产USERNAME
。它必须是持久类属性,而不是数据库列!
只需使用transaction = session.beginTransaction();
代替
transaction = session.getTransaction();
transaction.begin();
使用List<Task> 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
。以上是关于从数据库中读取数据并存储在数组列表中,但数组列表显示为空的主要内容,如果未能解决你的问题,请参考以下文章