You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ResultSet.TYPE_FORWARD_ONLY结果集调用relative方法报错原因及解决方案

报错原因

你代码中用到的rs.relative(2)属于JDBC结果集的滚动操作,默认情况下,通过无参conn.createStatement()创建的Statement对象,生成的ResultSet是ResultSet.TYPE_FORWARD_ONLY类型,这类结果集只支持单向向后遍历,仅能调用next()方法移动游标,所有滚动类操作(包括relative、absolute、previous、first等方法)都会触发你遇到的该异常。

相同代码在课程环境可运行的原因

主要是环境差异导致:

  • 驱动版本差异:部分旧版本的MySQL Connector/J驱动没有严格遵循JDBC规范校验结果集类型,即使是TYPE_FORWARD_ONLY类型的结果集调用滚动方法,也会做内部兼容不会报错;你本地使用的是更新版本的驱动,严格执行了规范校验。
  • 课程环境全局配置:部分教学环境会在数据库连接参数、驱动初始化环节,全局修改了Statement的默认生成规则,默认就返回可滚动类型的结果集,所以不需要额外指定参数也能正常运行。

额外优化建议

你修改后的指定可滚动结果集的写法是符合规范的标准解法,如果你不想修改结果集类型,也可以用计数器的方式实现隔行读取的需求,性能更优(单向结果集不需要额外缓存全量数据):

public static void ispisiSvakuDruguKnjigu(){
    try{
        Connection conn = getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from knjiga");
        // 用计数器实现隔行读取
        int index = 0;
        while(rs.next()){
            if(index % 2 == 0){
                System.out.println(rs.getString("id")+" "+rs.getString("naslov"));
            }
            index++;
        }
    } catch (Exception e){
        e.printStackTrace();
    }
}

内容的提问来源于stack exchange,提问作者randomuser123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:06:08