gpt4 book ai didi

java - 如何修复 Java 中 SqlRowSet.Next() 上的 'Invalid Cursor SQL Exception'

转载 作者:行者123 更新时间:2023-11-30 05:49:28 25 4
gpt4 key购买 nike

从 H2 数据库获取 SqlRowSet 对象后,在使用 SqlRowSet.getDouble(); 从行中检索数据之前,我调用 SqlRowSet.next();

我尝试过执行 while(SqlRowSet.next()){} 但这不需要,因为我的数据中始终只有 1 行。

public SqlRowSet findBySkuSize(String sku, String size) {
return jdbcTemplate.queryForRowSet("SELECT * from PRODUCT_DIMENSIONS where SKU = '" + sku + "' and SIZE = '" + size + "'");
}

上述方法填充 SqlRowSet 对象(在调试器中我可以看到下图中显示了 1 行。

        if(CountRows(dimensionResults) < 1) 
{

}
else
{
dimensionResults.next();
someObject.objectSetterMethod(dimensionResults.getDouble("DEPTH"));

}

上面的代码抛出了 InvalidCursorException我猜堆栈跟踪太长而无法粘贴,但这是错误消息

Caused by: java.sql.SQLException: Invalid cursor position
at com.sun.rowset.CachedRowSetImpl.next(CachedRowSetImpl.java:1460)
at org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet.next(ResultSetWrappingSqlRowSet.java:697)
... 67 more

org.springframework.jdbc.InvalidResultSetAccessException: Invalid cursor position; nested exception is java.sql.SQLException: Invalid cursor position
at org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet.next(ResultSetWrappingSqlRowSet.java:700)
at com.footlocker.commerce.shipping.service.FreightCalculationService.UpdateProductDimensions(FreightCalculationService.java:72)
at com.footlocker.commerce.shipping.service.FreightCalculationService.UpdateProductList(FreightCalculationService.java:50)
at com.footlocker.commerce.shipping.service.FreightCalculationService.ProcessFreightCalculationRequest(FreightCalculationService.java:41)
at com.footlocker.commerce.shipping.controller.FreightController.Test(FreightController.java:34)

Debugger

出于某种原因,它告诉我我的光标位置是 2?应该从0开始吗?如果我只有 1 行,它怎么可能是 2。

编辑:我能够将调试器菜单中的光标位置从 2 更改为 0 以及DimensionResults.next();有效..那么为什么当我实例化对象时它从光标位置 2 开始呢?我非常困惑为什么 Java 与 C# 相比必须如此复杂,并且找到资源来理解一切也很困难,哈哈。

最佳答案

显然,您的 CountRows 方法会将您带到结果集的末尾。

在这种情况下,您可能需要调用 beforeFirst() 以返回到结果集的初始位置。

比照。 how to reset the result set to the first row after looping through a while loop

此外,您的位置2是浏览结果集后您所在的位置,这是“最后一个之后”的位置,与调用afterLast()<后您所在的位置相同.

最后,您可能想看看以下问题: How do I get the size of a java.sql.ResultSet?

关于java - 如何修复 Java 中 SqlRowSet.Next() 上的 'Invalid Cursor SQL Exception',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54201989/

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