如何修复';无效的游标SQL异常';在Java中的SqlRowSet.Next()上
从H2数据库中获取SqlRowSet对象之后,使用如何修复';无效的游标SQL异常';在Java中的SqlRowSet.Next()上,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,从H2数据库中获取SqlRowSet对象之后,使用SqlRowSet.getDouble()从行中检索数据之前I调用SqlRowSet.next() 我已经尝试了while(SqlRowSet.next()){},但这应该不是必需的,因为我的数据中总是只有一行 public SqlRowSet findBySkuSize(String sku, String size) { return jdbcTemplate.queryForRowSet("SELECT * from PRODUCT
SqlRowSet.getDouble()从行中检索数据之前
I调用SqlRowSet.next()代码>
我已经尝试了while(SqlRowSet.next()){}
,但这应该不是必需的,因为我的数据中总是只有一行
public SqlRowSet findBySkuSize(String sku, String size) {
return jdbcTemplate.queryForRowSet("SELECT * from PRODUCT_DIMENSIONS where SKU = '" + sku + "' and SIZE = '" + size + "'");
}
上面的方法填充SqlRowSet对象(在调试器中,我可以看到下图中显示了一行
if(CountRows(dimensionResults) < 1)
{
}
else
{
dimensionResults.next();
someObject.objectSetterMethod(dimensionResults.getDouble("DEPTH"));
}
出于某种原因,它告诉我我的光标位置是2?它应该从0开始吗?如果我只有1行,它怎么可能是2
编辑:我可以将Debugger菜单中的光标位置从2更改为0,并标注Results.next();有效..那么为什么当我实例化对象时它会从光标位置2开始呢?我非常困惑,为什么Java与C#相比必须如此复杂,而且找到理解所有内容的资源也很困难。lol。显然,您的CountRows
方法将您带到了结果集的末尾
在这种情况下,您可能需要调用beforeFirst()
返回结果集的初始位置
比照
另外,您的位置2
是浏览结果集后的位置,这是“最后一次”位置,与调用afterLast()
后的位置相同
最后,您可能想看看以下问题:
CountRows做什么?这个方法可能会将您带到结果集的末尾。在这种情况下,您可能需要调用beforeFirst()之前的
返回到结果集的初始位置。哇,我甚至没有想到这一点!我想我已经习惯了不必这样做。我想我在想,当我将对象传递给一个方法时,它会传递一个副本,而方法中发生的任何事情都不会反映到该对象。非常感谢你,你应该这样做这就是答案。谢谢!我只是在返回调用方法之前添加了您对rows.beforeFirst()的建议。
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)