Java 为什么ResultSet不为null,但我无法从ResultSet获取数据

Java 为什么ResultSet不为null,但我无法从ResultSet获取数据,java,mysql,Java,Mysql,rs.next的值变为false。它不能进入while循环。但是如果我写rs.wasNull,那么我就又错了。所以我很困惑。我可以在数据库中使用相同的SQL获得正确的结果。当它出现在java文件中时,它就不工作了!我找不到哪里错了 whilenext{需要是whilers。接下来{,不是吗 是的,但是@duffymo的答案可能是你应该注意的,而下一个需要注意,不是吗 确实如此,但@duffymo的答案可能是您应该注意的问题您可以这样编写代码,但这是一个典型的n+1延迟陷阱。随着外部结果集的增大,

rs.next的值变为false。它不能进入while循环。但是如果我写rs.wasNull,那么我就又错了。所以我很困惑。我可以在数据库中使用相同的SQL获得正确的结果。当它出现在java文件中时,它就不工作了!我找不到哪里错了

whilenext{需要是whilers。接下来{,不是吗

是的,但是@duffymo的答案可能是你应该注意的,而下一个需要注意,不是吗


确实如此,但@duffymo的答案可能是您应该注意的问题

您可以这样编写代码,但这是一个典型的n+1延迟陷阱。随着外部结果集的增大,它的性能会越来越差

如果您学习了如何正确编写连接,还可以在一次网络往返中返回所有数据


如果必须这样做,我将创建两个PreparedStatement实例:一个用于外部循环,另一个用于内部循环。

您可以这样编写代码,但这是一个典型的n+1延迟陷阱。随着外部结果集的增大,它的性能会越来越差

如果您学习了如何正确编写连接,还可以在一次网络往返中返回所有数据


如果必须这样做,我将创建两个PreparedStatement实例:一个用于外部循环,另一个用于内部循环。

这看起来确实像一个输入错误:

public List<Course> searchCourse(String name) {
        List<Course> list = null;
        Course course = null;
        PreparedStatement pstmt = null; 
        ResultSet rs = null,rs1 = null;

        String sql = "select username,course_name from view_teacourse where username=? or course_name=? ";

        try{
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, name);
            pstmt.setString(2, name);
            rs = pstmt.executeQuery();
            while(next()){
                String sql1 = "select * from courseinfo where course_name=?";
                pstmt.setString(1, rs.getString("cousre_name"));
                rs1 = pstmt.executeQuery();
                while(rs1.next()){
                    course.setCourseid(rs.getInt("course_id"));
                    course.setCourseName(rs1.getString("course_name"));
                    course.setCourseScheme(rs.getString("course_scheme"));
                    course.setCourseBook(rs.getString("course_book"));
                    course.setCourseTerm(rs.getString("course_term"));
                    course.setIntroduction(rs.getString("introduction"));
                    course.setStartTime(rs.getTimestamp("start_time"));
                    course.setEndTime(rs.getTimestamp("end_time"));
                    course.setValidation(rs.getBoolean("validation"));
                    course.setCourseType(rs.getInt("coursetypeid"));
                    list.add(course);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            DBBase.releaseResultSet(rs1);
            DBBase.releaseResultSet(rs);
            DBBase.releaseStatement(pstmt);
            DBBase.releaseConnection(conn);
        }
        return list;
    }
除了null之外,您似乎也没有为课程分配任何内容。Java明确的分配规则是您的朋友;null不是


您确定这正是您正在运行的代码吗?

这看起来确实像一个打字错误:

public List<Course> searchCourse(String name) {
        List<Course> list = null;
        Course course = null;
        PreparedStatement pstmt = null; 
        ResultSet rs = null,rs1 = null;

        String sql = "select username,course_name from view_teacourse where username=? or course_name=? ";

        try{
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, name);
            pstmt.setString(2, name);
            rs = pstmt.executeQuery();
            while(next()){
                String sql1 = "select * from courseinfo where course_name=?";
                pstmt.setString(1, rs.getString("cousre_name"));
                rs1 = pstmt.executeQuery();
                while(rs1.next()){
                    course.setCourseid(rs.getInt("course_id"));
                    course.setCourseName(rs1.getString("course_name"));
                    course.setCourseScheme(rs.getString("course_scheme"));
                    course.setCourseBook(rs.getString("course_book"));
                    course.setCourseTerm(rs.getString("course_term"));
                    course.setIntroduction(rs.getString("introduction"));
                    course.setStartTime(rs.getTimestamp("start_time"));
                    course.setEndTime(rs.getTimestamp("end_time"));
                    course.setValidation(rs.getBoolean("validation"));
                    course.setCourseType(rs.getInt("coursetypeid"));
                    list.add(course);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            DBBase.releaseResultSet(rs1);
            DBBase.releaseResultSet(rs);
            DBBase.releaseStatement(pstmt);
            DBBase.releaseConnection(conn);
        }
        return list;
    }
除了null之外,您似乎也没有为课程分配任何内容。Java明确的分配规则是您的朋友;null不是


你确定这正是你正在运行的代码吗?

下一个方法在做什么?你说rs.next为false。这意味着你在数据库中找不到任何与“name”匹配的项。所有其他问题都源于此。Course Course=null;但这从来没有用对象初始化过..!下一个方法在做什么?你说rs.next为false。这意味着s您在数据库中找不到任何与“name”匹配的项。您所有的其他问题都源于此。Course=null;但这从来没有用对象初始化过..!抱歉…我在文件中使用rs.next。复制代码时这是一个错误!谢谢!抱歉…我在文件中使用rs.next。复制代码时这是一个错误!谢谢!你能告诉我什么是c吗lassicn+1延迟陷阱?我以前没听过。谢谢!你能告诉我什么是Classcn+1延迟陷阱吗?我以前没听过。谢谢!