我的问题是我必须在 try 语句中设置一个变量,否则会出现编译错误。
稍后我需要使用该变量,但它现在超出了范围,或者我相信。我在 try 语句之外初始化变量并将其设置为 null,我认为它可能可以在外部访问,但我仍然得到一个NullPointerException
.
代码在下面,为了便于阅读,去掉了很多代码——我知道这是不好的代码,但我是 Servlets 的新手,只是想看到它运行时所有移动部件都在做它们应该做的事情。
我创建了另一个调用 createDocs(...) 并传入所需参数的类,它工作正常。所以这让我很好奇为什么当我打电话时rs.getString("name")
我得到了NullPointerException
,因为这正是我在其他类中所做的(为了方便而从 main 方法运行)并且它按预期工作。
有问题的变量是 ResultSet 变量“rs” -
public class AgReportServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public AgReportServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResultSet rs = null;
try {
rs = docs.getDocs(con, start, end, zone, locality);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" +
out.println(
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"6\">\n");
// I have a resultset object need to iterate through it to display the file names
try {
while (rs.next()) { // page through the result set
out.println(
" <tr>\n" +
" <td>: " + rs.getString("name") + "</td>\n" +
" </tr>\n"
);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.println(
"</table></body>\n" +
"</html>"
);
out.flush();
out.close();
}
}