2013-04-22 123 views
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文件中不起作用!我找不到错在哪里!为什么ResultSet不为null但我无法从ResultSet获取数据

+0

next()方法在做什么? – 2013-04-22 11:51:19

+0

你说rs.next()是错误的。这意味着你没有在数据库中找到'name'的任何匹配项。所有其他问题都源于此。 – 2013-04-22 11:55:57

+2

'Course course = null;' 但是这绝不会用对象初始化..! – 2013-04-22 11:57:01

回答

1

你可以写这样的代码,但它是一个经典的(N + 1)延迟陷阱。随着外部结果集大小的增长,它会变得越来越糟糕。

如果您了解如何正确编写JOIN,还可以将所有数据重新存入一个网络往返。

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

+0

你能告诉我什么是经典(n + 1)延迟陷阱?我没有听到它,谢谢! – Ryan 2013-04-23 02:56:38

5

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

(确实如此,但@ duffymo的答案是一个你可能要注意)

+0

对不起...我在我的文件中使用rs.next()。当我复制我的代码时,这是一个错误!谢谢你! – Ryan 2013-04-23 02:52:35

0

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

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

也似乎并不是course分配什么,但null。 Java的明确的分配规则是你的朋友; null不是。

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

相关问题