当前位置: 首页 > 面试题库 >

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

万俟飞语
2023-03-14
问题内容

我正在学习如何使用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);
        }
    }


 类似资料:
  • 对API控制器的远程调用(通过RestTemboard)(从一侧返回已知对象的List([]),从远程侧返回未知类型的对象)返回

  • 现在假设我有许多动物子类,我将连续得到许多“else if...” 我的问题是:有没有办法避免这种情况?我已经尝试使用一个接口(动物->接口、狗、猫等实现动物),但是在我的项目中,数组必须是可克隆的,如果动物是一个接口,你就不能克隆一个数组“动物[]ArrayOfAnimals”(该数组中的对象将不会被克隆)

  • 在通用堆栈的实现中,使用了以下习惯用法,并且没有任何问题 但是,当我尝试以下操作时,它会导致ClassCastException 这个你怎么解释?

  • 问题内容: 我已经搜索过了,但是不幸的是,我没有得到正确的答案。 测试一下: 但是有一个错误抛出: 如何解决呢? 更新 我需要此方法,因为有时代码中的类型太长: 我希望致电: 最后 创建这样的方法似乎是不可能的,非常感谢大家! 问题答案: 您可以调用而不用担心自己实现它,但是正如aioobe所说,由于类型擦除,您不能创建通用类型的数组。如果需要返回该类型,则需要自己创建一个类型化实例并将其传递。

  • 我希望将一个< code>int数组转换为一个< code>double数组。 所以,当我有 我想使用,比如说把它作为参数传递给一个方法。 最好的方法是什么? 演员阵容 不工作。 我可以迭代通过: 有没有更好的方法来做到这一点? <代码>系统。arraycopy不起作用——不适用于两种不同基元类型的数组。 注意:在Java和其他一些讨论中,我们看到了将对象转换为数组。 蒂亚。

  • 我的javascript代码中有一个字符串列表,我通过JQuery将其发送到基于REST的服务,如下所示: 如您所见,我将javascript数组转换为JSON数组。 现在,在服务器端,我使用Spring MVC和Jackson来接收和解析输入JSON: 但我总是得到: 我尝试从JSON对象中删除引号,还尝试使用,但没有成功。 根据OQJF建议进行更新: 我修改了我的帖子请求如下: 现在调用了我的