0
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;
    }

的值rs.next()越来越错误。它不能进入​​while循环。但是,如果我rs.wasNull()这样写,我又弄错了。所以我很困惑。我可以在我的数据库中使用相同的 SQL 获得正确的结果。当它在java文件中时它不起作用!我找不到错在哪里!

4

3 回答 3

5

while(next()){需要while(rs.next()){,不是吗?

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

于 2013-04-22T11:50:29.047 回答
1

你可以用这种方式编写代码,但这是一个经典的 (n+1) 延迟陷阱。随着外部结果集大小的增长,它的性能会越来越差。

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

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

于 2013-04-22T11:52:47.767 回答
0

这肯定看起来像一个错字:

pstmt.setString(1, rs.getString("cousre_name"));

null除了to之外,您似乎也没有分配任何东西course。Java 明确的赋值规则是你的朋友;null不是。

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

于 2013-04-22T12:16:33.610 回答