gpt4 book ai didi

java - Hsqldb - 从存储过程返回结果集

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:11 27 4
gpt4 key购买 nike

我正在尝试调用 HsqlDB 中的存储过程并返回一个结果集

我的存储过程如下

    CREATE PROCEDURE p_getTeamTasksForLastXDays(IN teamId BIGINT, IN numberOfDays BIGINT) READS SQL DATA
DYNAMIC RESULT SETS 1
BEGIN ATOMIC
declare curs cursor for select taskId, taskName from V_TASK_DETAILS;
open curs;
END;
/;

我用来调用这个proc的Java和hibernate代码如下

public void getTaskExecutionLogs(Long teamId, Long numberOfDays) {
LOG.info("Entered getTaskExecutionLogs Method - teamId:{}, numberOfDays: {}", teamId, numberOfDays);

ProcedureCall procedureCall = currentSession().createStoredProcedureCall("p_getTeamTasksForLastXDays");
procedureCall.registerParameter( TEAM_ID, Long.class, ParameterMode.IN ).bindValue( teamId );
procedureCall.registerParameter( NUMBER_OF_DAYS, Long.class, ParameterMode.IN ).bindValue( numberOfDays );

ProcedureOutputs outputs = procedureCall.getOutputs();
ResultSetOutput resultSetOutput = (ResultSetOutput) outputs.getCurrent();

List resultSetList = resultSetOutput.getResultList();

}

当我试图调用这个过程时得到的错误如下

java.lang.ClassCastException: org.hibernate.result.internal.UpdateCountOutputImpl cannot be cast to org.hibernate.result.ResultSetOutput
at com.mct.dao.database.impl.TaskDetailsDAOImpl.getTaskExecutionLogs(TaskDetailsDAOImpl.java:229)

当我尝试在 MySql 中调用存储过程时,完全相同的代码工作正常

非常感谢任何帮助

谢谢达米安

最佳答案

ProcedureOutputs 是一个接口(interface),它扩展 Outputs ( source )。

ResultSetOutput 是一个接口(interface),它扩展 Output ( source )。当您调用 OutputsgetCurrent() 时,您将获得一个 Output ( source )。

基本上,您期望转换是正确的,因为您将结果转换为 Output 的子接口(interface)。你正在做的事情叫做 downcast .让我们看看这个案例。

您想将一个对象转换为另一个对象。向下转换可能是可能的,因为 ResultSetOutput extends Output。由于向下转换可能是可能的,因此不会出现编译时错误,并且在可能的情况下(例如在 MySQL 中调用存储过程时)向下转换会成功。但是,当无法进行向下转换时,您会得到一个运行时异常。在我们的特定情况下,向下转换是不可能的,因为 .getOutputs 返回另一个分类,可能是另一个继承分支上的子接口(interface),如 UpdateCountOutput .

关于java - Hsqldb - 从存储过程返回结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402193/

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