「已注销」 2019-10-02 17:10 采纳率: 50%
浏览 262

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条回答

  • threenewbee 2019-10-02 17:21
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题