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文件中时它不起作用!我找不到哪里错了!
答案 0 :(得分:5)
while(next()){
需要while(rs.next()){
,不是吗?
(确实如此,但@ duffymo的答案是你应该注意的答案)
答案 1 :(得分:1)
你可以用这种方式编写代码,但这是一个经典的(n + 1)延迟陷阱。随着外部结果集的大小增加,它会越来越差。
如果您学习如何正确编写JOIN,也可以将所有数据带回一个网络中。
如果你必须这样做,我会创建两个PreparedStatement实例:一个用于外部循环,另一个用于内部循环。
答案 2 :(得分:0)
这肯定是一个错字:
pstmt.setString(1, rs.getString("cousre_name"));
您似乎也没有向null
分配除course
之外的任何内容。 Java的明确分配规则是你的朋友; null
不是。
您确定正好您正在运行的代码吗?