如何将java.sql.array转换为list <myclass>

时间:2018-02-02 18:42:11

标签: java list jdbc oracle12c

我为我的应用程序编写了一些DAO对象,它们与oracle数据库(对象关系数据库)进行通信。一切正常,除了这部分代码:

List<Object>grades = new ArrayList<>();

Array gradesList = (Array)rs.getArray("GRADES");
grades = Arrays.asList(gradesList.getArray());

有了这个我得List<Object>。我真正需要的是List<Grade>。我搜索了互联网的答案,但我找不到任何答案。我试图从for循环中的成绩列表中转换对象并将它们添加到另一个List但是没有用。它可以以某种方式完成吗?

3 个答案:

答案 0 :(得分:1)

您可以先将列表转换为通用列表,然后将其转换为等级列表,将列表转换为其他列表;

List<Grade> gradeList = (List<Grade)(List<?>) grades;

答案 1 :(得分:0)

我找到了解决问题的方法。由于我在我的应用程序中使用了oracle数据库,因此我使用了这些包:

import oracle.sql.ARRAY;
import oracle.sql.Datum;
import oracle.sql.STRUCT;  

我需要提一下,我的一个数据库表中的"GRADES"字段被组织为嵌套表。然后我得到了像这样的Grade对象列表:

List<Grade>grades = new ArrayList<>();
ARRAY gradesList = (ARRAY)rs.getObject("GRADES");
if(gradesList != null && gradesList.length() != 0) {
    Datum[] elems = gradesList.getOracleArray();    

    for(int i = 0; i<elems.length;i++) {
        STRUCT gradeInfo = (STRUCT) elems[i];
        Object[] gradeInfoValues = gradeInfo.getAttributes();
        Grade grade = new Grade();
        /*SETTING GRADE OBJECT ATTRIBUTES BY USING gradeInfoValues ARRAY ...*/
        grades.add(grade);
        }
    }   

就是这样!

https://docs.oracle.com/cd/A97630_01/java.920/a96654/oraarr.htm

答案 2 :(得分:0)

如果您使用的是Java 8并假设您有List<Object>,则需要将其转换为List<Grade>。然后,您可以按照以下方式使用流。

final List<Grade> gradeList = grade.stream()
                             .filter(Grade.class::isInstance)
                             .map(Grade.class::cast)
                             .collect(toList());

filter()排除会导致类型转换异常的项目。