我正在学习如何使用SQLData,并且在投射回我的对象​​时遇到问题。

我的Oracle类型看起来像这样:

CREATE OR REPLACE TYPE activities_t AS OBJECT
(
   list   activity_list_t;
);

CREATE OR REPLACE TYPE activity_list_t AS TABLE OF activity_t;

CREATE OR REPLACE TYPE activity_t AS OBJECT
(
   startDate  DATE;
   endDate    DATE;
);


我的Java看起来像这样:

public class Activities implements SQLData {
    private String sqlType = "ACTIVITIES_T";
    List<Activity> list;

    // must have default ctor!
    public Activities() {
    }

    public String getSQLTypeName() throws SQLException
    {
        return sqlType;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public void readSQL(SQLInput stream, String typeName) throws SQLException
    {
        Array a = stream.readArray();
        // :(
    }

    public void writeSQL(SQLOutput stream) throws SQLException
    {
        // stream.writeArray(this.list);
    }
}


我已经在readSQL中尝试了几件事,但没有取得太大的成功-我缺少什么?

我正在使用JDBC调用一个OUT参数为“ activities_t”的PLSQL存储过程:

Map map = connection.getTypeMap();
map.put("ACTIVITIES_T", Class.forName("Activities"));
connection.setTypeMap(map);

callableStatement = connection.prepareCall("{call GET_ACTIVITIES(?)}");
callableStatement.execute();


谢谢!
史蒂夫

(以上大部分内容都来自内存,因为代码正在起作用...)

最佳答案

您需要为类型ACTIVITY_T和类型ACTIVITIES_T添加类型映射。从您的问题尚不清楚您是否已经完成此操作。

假设您已完成此操作,并创建了一个名为Activity的类,该类也实现了SQLData。完成此操作后,以下内容就足以阅读Activities中的活动列表:

    public void readSQL(SQLInput stream, String typeName) throws SQLException {
        Array array = stream.readArray();
        this.list = new ArrayList<Activity>();
        for (Object obj : (Object[])array.getArray()) {
            list.add((Activity)obj);
        }
    }

10-05 17:46