【问题标题】:resultset is closed exception on first iteration of .next()结果集在 .next() 的第一次迭代中是关闭的异常
【发布时间】:2013-08-12 15:22:29
【问题描述】:

我无法弄清楚为什么我的结果集抛出异常.. 结果集对象在调试时不为空,但无法进入if语句 if(resultset.next()) 我不确定我在做什么错.. 谢谢你的帮助。

顺便说一句,我正在通过黄瓜测试访问这个类,但是在这个阶段我认为这与问题无关..

下面是相关代码:

 input = new Object[]{nEventID, nEventID, nAccountID};
 callback = new NamedQueryStatementCallback("GET_ACTIVE_EVENT_ENTITLEMENT_DETAILS",     input, false);
 resultSet = (ResultSet)getHibernateTemplate().execute(callback);

 if (resultSet != null)
 {
outputList = new ArrayList();
if (resultSet.next()) //here is where exception gets thrown - on first iteration,     so it never enters branch
{
    do
    {
        //create object list with data
    }while (resultSet.next());
}
}

【问题讨论】:

    标签: java exception resultset cucumber-jvm


    【解决方案1】:

    我的猜测是使用 Spring 2 或它的一些专有分支。 API doc for the HibernateTemplate 说:

    允许返回结果对象,即域对象或 域对象的集合。

    您的回调应处理对结果集的所有处理并填充域对象,然后返回域对象(在本例中为 objectList)。 resultSet 在执行调用返回之前关闭。

    回调的意义在于回调可以指定需要发生的逻辑,而执行回调的事物可以管理和清理资源。 ResultSet 尤其不是可以传递的数据持有者,它们通常需要尽快使用和关闭。所以我希望框架会在回调完成后关闭结果集。

    【讨论】:

    • 实际上您发布的链接来自Spring,它也实现了休眠。我不确定回调部分是否与这个问题相关。
    • @alfasin:从问题中不清楚 HibernateTemplate 的实现是什么。但是回调的意义在于它允许代码在运行它的部分可以管理资源时运行,因此返回一个结果集并在回调后直接访问它就达不到目的了。所以这就是为什么我认为它是相关的。
    • 我刚刚添加了一个 if(resultset.isClosed()){//do something} 并且它也爆炸了。我想知道这是否是一个转换错误?有趣的是,这不是在整个代码库中实现这种检索结果集的确切方法的唯一地方..
    • 这个实现和其他实现的区别实际上是回调,所以我会说你在球内森
    • 我仍然不知道该怎么做才能解决这个问题。如果有人能指出我的方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2015-02-10
    • 2019-05-16
    • 2011-06-23
    相关资源
    最近更新 更多