如何从Java中的列表<object>读取数据?

时间:2015-07-04 15:14:56

标签: java

我有一个对象列表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问题?

感谢您的帮助!

2 个答案:

答案 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提供的解决方案很聪明但不适合我。