结果集无当前行报错:JDBC Template查询代码问题求助
排查JDBC Template「结果集无当前行」报错
错误原因
你的代码使用了do-while循环,而JDBC的ResultSet初始位置是在第一行记录之前的。do-while会先执行循环体里的request.getLong(1)、request.getString(2)等操作,这时候还没调用next()将指针移动到有效行,直接读取列值就会触发「结果集无当前行」的错误。
修正代码
把do-while改成while循环,先通过request.next()判断是否有有效行,再执行读取操作:
jdbcTemplate.query(sql, request -> { while (request.next()) { response.put(request.getLong(1), request.getString(2)); if (request.getInt(5) != 1) { responseForMachine.put(request.getString(3), "1A"); } } return null; }, time);
额外注意事项
- 确认SQL查询返回的结果集包含至少5列(你用到了索引1、2、3、5),如果列数不足,即使修复循环,也会抛出列不存在的错误。
- 如果SQL可能返回空结果集,
while(request.next())会直接跳过循环体,不会触发任何读取操作,避免报错。
内容的提问来源于stack exchange,提问作者My Animation TV
相关产品推荐
相关产品推荐

