IDEA JDBC 结果集 next()

结果集只有一行,debug时next()方法返回false,无法进入循环,但是运行时可以显示结果,说明循环已经进行(结果集有多行时正常,有几条就输出几条)

代码(只粘贴有关代码)

Servlet

//sql语句
String sql = "SELECT * FROM userdata WHERE id = ?";
//传入连接、接收数据的类,sql语句以及sql语句中?的替代
        ArrayList<Data> arrayList = JDBC.search(connection, Data.class, sql, 1);
        PrintWriter writer = response.getWriter();
        for (Data d : arrayList) {
            writer.println(d);
        }

JDBC类

public static <T> ArrayList<T> search(Connection connection, Class<T> clazz, String sql, Object... args) {
        PreparedStatement ps = null;
        ResultSet result = null;
        ArrayList<T> collection = new ArrayList<T>();
        try {
            ps = connection.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i + 1, args[i]);
            }
            result = ps.executeQuery();
            //获取结果集的元数据
            ResultSetMetaData rsmd = result.getMetaData();





                        //之前没有用过next()
            while (result.next()) {






                //获取结果集列数
                int columnCount = rsmd.getColumnCount();
                //创建存储结果集数据的对象
                T t = clazz.getDeclaredConstructor().newInstance();
                for (int i = 0; i < columnCount; i++) {
                    //获取结果集一行的各列的数据
                    Object columnValue = result.getObject(i + 1);
                    //获取当前列的列名
                    String columnLabel = rsmd.getColumnLabel(i + 1);
                    //给对象的每个属性赋值
                    Field field = clazz.getDeclaredField(columnLabel);
                    field.setAccessible(true);
                    field.set(t, columnValue);
                }
                collection.add(t);
            }
        } catch (SQLException | NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        } finally {
            if (collection == null) {
                System.out.println("Failed to search");
            }
            return collection;
        }
    }

debug时next()返回false,无法进入循环



图片说明



运行时在页面可以显示



图片说明

1个回答

weixin_44690437
Un_dollar debug了好多回发现好像不是第一次next()就返回false,而是debug无法进入while循环(上面的for循环可以进入),直接跳过了循环,导致执行了几次next(),光标到了末尾,才返回false,想调试个类似的程序怎么进while循环···········
6 个月之前 回复
weixin_44690437
Un_dollar 这个程序也是用的while(rs.next()),并不能解决问题(试了下确实不行),我是想问为什么idea中运行和debug的结果不一样,按理说既然结果集查到结果第一次next()不应该返回false,请问debug中这个情况该如何解决?3Q
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问