我尝试从mysql查询中获取结果并将其存储在对象中,但我有一个类强制转换异常,我在一个带有mysql的Java项目中工作。
查询工作正常,我将结果存储在using System;
using System.Collections.Generic;
using Newtonsoft.Json;
public class RootObject
{
public string url_short { get; set; }
public string url_long { get; set; }
public int type { get; set; }
}
public class Program
{
static public void Main()
{
string j = "[{\"url_short\":\"http:\\/\\/sample.com\\/8jyKHv\",\"url_long\":\"http:\\/\\/www.sample.com\\/\",\"type\":0}]";
List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(j);
Console.WriteLine(ro[0].url_short);
}
}
这是我的代码:
r list<Object>
错误日志是:
List<QReport> result = new ArrayList<QReport>();
try {
List<Object> r = boomFacade.getEm().createNativeQuery("SELECT boom.name, boom.date, boom.type "
+ "FROM boom "
+ "where boom.type = 'REQUESTED' "
+ "AND boom.boomNumber = ? "
+ "AND boom.date >= ? "
+ "AND boom.date <= ? "
+ "ORDER BY boom.name, boom.id")
.setParameter(1, boomNumber)
.setParameter(2, start)
.setParameter(3, end)
.getResultList();
for (Object l: r){
List<Object> ls = (ArrayList<Object>) l; // Class cast execption here
QReport report = new QReport();
report.setName((String) ls.get(0));
Date eventDate = new Date( ((Timestamp)ls.get(1)).getTime());
report.setDate(eventDate);
report.setType((String) ls.get(2));
result.add(report);
}
}
catch (Exception e){
e.printStackTrace();
}
return result;
答案 0 :(得分:0)
对于我来说,目前尚不清楚是什么样的事情?#34;繁荣&#34;是。但是很明显,无论是数据库结构还是hibernate映射,或者两者都不是很合理。如果你做得对,你不必手动在你的结果中找到你想要的对象,就像在旧的JDBC中一样。避免这样的样板代码是人们发明像hibernate这样的框架的原因。 如果您不确定如何正确进行映射,这对于stackoverflow来说是一个很好的问题。
答案 1 :(得分:-1)
查看https://howtoprogramwithjava.com/java-cast/
您正在该线上执行完全不需要且脱离上下文的演员。
您可以使用DataGridRow
Object[]
转换为List<Object>