Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复';无效的游标SQL异常';在Java中的SqlRowSet.Next()上_Java_Spring_Spring Jdbc - Fatal编程技术网

如何修复';无效的游标SQL异常';在Java中的SqlRowSet.Next()上

如何修复';无效的游标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

从H2数据库中获取SqlRowSet对象之后,使用
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)