gpt4 book ai didi

Java SQLData - 使用列表/数组转换为用户对象?

转载 作者:行者123 更新时间:2023-11-29 07:01:18 24 4
gpt4 key购买 nike

我正在学习如何使用 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 调用具有“activities_t”OUT 参数的 PLSQL 存储过程:

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

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

谢谢!史蒂夫

(以上大部分是靠内存,因为代码在工作...)

最佳答案

您需要为类型 ACTIVITY_TACTIVITIES_T 添加类型映射。从你的问题中不清楚你是否已经这样做了。

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

    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);
}
}

关于Java SQLData - 使用列表/数组转换为用户对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25619803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com