我有一个对象列表List,它是HQL查询的结果。列表的对象包含我需要的数据。如果我知道数据的类型,我会做以下事情:
(我知道这个查询是Select country, globalAmount, average from table
)
for (Object record : result) {
Object[] fields = (Object[]) record;
String country = (String) fields[0];
long globalAmount = (Long) fields[1];
double average = (Double) fields[2];
System.out.println("Country "+country );
System.out.println("Global Amount "+globalAmount);
}
问题在于,有时候,我不知道对象中是否会有“Country”或“average”,并且查询可能完全不同:
Select average, date, message from table
然后,要检索数据,我必须执行以下操作:
for (Object record : result) {
Object[] fields = (Object[]) record;
double average = (Double) fields[0];
Timestamp date= (Timestamp) fields[1];
String message = (String) fields[2];
System.out.println("date " +date);
System.out.println("Message "+Message);
System.out.println("Average " + Average);
}
有没有什么方法可以动态地从这个List中检索数据而不会出现Cast问题?
感谢您的帮助!
答案 0 :(得分:0)
这只是一个原型。我在这里做的是得到所有的列名,然后根据列名称我将其类型转换为所需的类型。
这只是一个小技巧。
String query = "Select x, y, z from tablename";
//get the columns here
String colums = query.substring(7, query.indexOf("from") - 1).trim();
String []arrColums = colums.split(",");
for(int i = 0; i < arrColums.length; i++)
{
switch(arrColums[i])
{
case "X" : X x = (X)result.get(i);
case "Y" : Y y = (Y)result.get(i);
}
}
答案 1 :(得分:0)
似乎不可能。我不得不使用If块来确定我接收的是哪种类型。很长但没有任何其他选择。 Uma Kanth提供的解决方案很聪明但不适合我。