这是一个jsp页面的代码 其中的Article 和DBase 类是用到的JavaBean类
请各位注意看这段代码的sql语句 这个语句 如果用被我注释了的sql语句
就会在while(rs.next()) 这里抛出 NullPointerException
而使用第二个sql语句 和第一个的差别就是不按时间排序 就可以正常运行
谁能给我解释为什么呢?
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import=" java.sql.*,com.libra.bbs.* " %>
<%
String strid = request.getParameter("id");
if(strid == null || strid.trim().equals("")){
out.println("ERROR ID !!");
}
int id = 0;
 try{
   id = Integer.parseInt(strid);
 }catch(NumberFormatException e){
 e.printStackTrace();
 out.println("ERROR ID!!");
 }
//String sql = "select * from article where rootid ="+ id +"order by pdate asc";
String sql = "select * from article where rootid ="+ id ;
Connection conn = DBase.getConn();
Statement stmt = DBase.createStmt(conn);
ResultSet rs = DBase.executeQuery(stmt,sql);
Article ar = null ;
int i =0 ;
while(rs.next()){//异常报错的地方
ar = new Article ();
ar.initFromRs(rs);
String floor = i==0? "楼主" :"第"+i+"楼";
i++ ;
String cont = ar.getCont().replaceAll("\n","<br>");
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body><table border ="1" width="400">

<tr>
<td > <font color="#0011ff">主题:<%=ar.getTitle()+"----------"+floor %> </font></td>

</tr>
<tr><td><font color="#df11de"><%= cont %></font></td></tr></table>
<%  
}
%>
<a href="Reply.jsp?id=<%=ar.getId()%>&rootid=<%=ar.getRootId()%>"> 回帖</a>
<%
  DBase.close(rs);
  DBase.close(stmt);
  DBase.close(conn);
  if(ar == null){
%>
<font color ="ff11aa">你找的帖子不存在,请选择别的帖子。</font>
<%
return ;
  }
%></body>
</html>

解决方案 »

  1.   

    那个地方报错,肯定是你rs为null了,估计是你方法写的有问题吧
      

  2.   

    ResultSet rs = DBase.executeQuery(stmt,sql); 这句话返回的rs可能为null
      

  3.   

    我写的那个sql语句呢 为什么不按时间排序就正常了?
    我在数据库里运行也正常啊 
      

  4.   

    "order by pdate asc" 是不是少打了个空格,应是这样:
    " order by pdate asc"