我试图返回查询结果,但出现以下错误:
java.lang.illegalargumentexception:无法使用请求的结果类型[java.sql.resultset]为具有多个返回的查询创建typedquery
以下是我的请求Map:
@RequestMapping(path="getAVGYTDStats.do", method =
RequestMethod.GET)
public ModelAndView getAvgYTDStats() throws SQLException {
ModelAndView mv = new ModelAndView();
List<Double> stats;
stats = housedao.getAvgPriceYTDStats();
System.out.println("stat after retrieval: " + "\n" + stats);
mv.addObject("stats", stats);
mv.setViewName("WEB-INF/views/stats.jsp");
return mv;
这是我的dao访问器:
public List<Double> getAvgPriceYTDStats() throws SQLException {
String sql = "select avg(h.closedPrice), avg(h.soldConcessions)
from House h where h.closedDate>=\'2018-01-01\'";
ResultSet avgSalesYTD = em.createQuery(sql,
ResultSet.class).getSingleResult();
if (avgSalesYTD.next()) {
System.out.println(avgSalesYTD.getFloat(1));
System.out.println(avgSalesYTD.getFloat(2));
}
List<Double> stats = new ArrayList<Double>();
stats.add(avgSalesYTD.getDouble(1));
stats.add(avgSalesYTD.getDouble(2));
avgSalesYTD.close();
return stats;
}
我在兜圈子,想让它发挥作用。它编译但执行时出现上述异常。
有什么建议吗?谢谢您!
编辑:好的,我已经看过回复了(谢谢!)“想想”我走上了更好的轨道。以下是我现在所做的:
public List<Double> getAvgPriceYTDStats() throws SQLException {
List<Double>stats =
em.createQuery(
"select avg(h.closedPrice), avg(h.soldConcessions) from
House h where h.closedDate>=\'2018-01-01\'")
.getResultList();
return stats;
}
我想我在这里要做的是从我的requestmapper调用方法/查询,请求一个double列表,然后将该列表返回给控制器和requestmapper。
然后我将该对象添加到我的模型中,并在jsp上打印出来。
问题是没有字符串,但我不知道如何转换它的方式显示。
1条答案
按热度按时间tgabmvqs1#
那个
ResultSet.class
你的表情createQuery
调用不是你如何使用这个api的。你把期望的类型放进去,然后getSingleResult
方法负责将得到的1行折叠回对象中。但在这段代码中,您是在努力读取数据的人。所以,不要使用
getSingleResult
,只需正常获取结果集。我不认识您在这里使用的db api(例如,不清楚'em'变量的类型),因此您必须查看文档以了解如何执行此操作。应该很简单。