java - 如何在 Java 中修复 SqlRowSet.Next() 上的“无效游标 SQL 异常”
问题描述
从 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)
出于某种原因,它告诉我我的 cursorPosition 是 2?它应该从0开始吗?如果我只有 1 行,它怎么可能是 2。
编辑:我能够将调试器菜单中的光标位置从 2 更改为 0 和 dimensionResults.next(); 工作.. 那么为什么当我实例化对象时它从光标位置 2 开始?我非常困惑为什么 Java 与 C# 相比必须如此复杂,并且找到资源来理解一切也很困难,哈哈。
解决方案
显然,您的CountRows
方法将您带到了结果集的末尾。
在这种情况下,您可能需要调用beforeFirst()
以返回结果集的初始位置。
此外,您的位置2
是浏览结果集后您所在的位置,这是“最后一个”位置,与您在调用后的位置相同afterLast()
。
最后,您可能想看看以下问题: 如何获得 java.sql.ResultSet 的大小?
推荐阅读
- python - 我收到此错误“元组没有属性‘obj’”
- windows - 最小化表格消失
- django - 无法导入
. 检查 是正确的 - python - 亚马逊 MWS - 如何在一个请求中组合提交 Feed 类型
- java - 多个请求值的无法解决的错误发送到 plc (apache.plc4x)
- ruby-on-rails - 如何在 Rails 中使用 authenticate_or_request_with_http_token 进行 http 请求?
- sql-server - “Oracle 目标”的组件元数据无法升级到组件的较新版本
- android - android react native上的透明边框损坏
- android - 将手机连接到外接显示器并启动应用程序
- node.js - EMFILE:打开的文件太多(lazyFs.open)