我的问题是我必须在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();
}
}
您的问题是,如果此语句:
rs = docs.getDocs(con, start, end, zone, locality);
抛出异常,则rs的值仍然是null
。所以我要做的是将循环移动到同一try-catch块中。另外,您可以在尝试使用它之前检查它是否仍然为空。
在try-catch块之外将值设置为null并不是不好的代码。如果要将rs变量放在try块之外(并且包括在catch子句之一中),则只需要这样做。您的rs
while循环可能应该只在同一try块内。
问题内容: 在确定文件是否存在时,使用try语句如何避免“竞争条件”? 我之所以这样问是因为高度支持的答案0)(更新:已删除)似乎暗示使用会创造机会,否则这种机会就不会存在。 给出的示例是: 但与以下内容相比,我不了解如何避免出现竞争状况: 调用如何使攻击者能够处理他们无法完成的文件? 问题答案: 比赛条件,当然,你的程序和文件上运行一些其他的代码之间(竞争状态总是需要至少两个平行的进程或线程,看
我如何避免在这里过度使用试捕?我如何简化裁员
问题内容: 如何在执行Update语句时设置变量?我似乎无法弄清楚语法。 所以我想要下面这样的东西,但是它说语法是错误的: 问题答案: 这个有可能 :- 设置整数(不递增)
需要在一个PDF文件中导出所有的表单,所以我找到了这段代码,它工作(导出一个单PDF,每个表单有一页)。但是我不想使用select/active语句,我更喜欢使用存储对象的变量。 问题:在这段代码中如何避免select/ActiveSheet?
我希望我的 print 语句在循环之外,这样语句就不会一遍又一遍地打印相同的内容。下面的 for 循环只是将一个数组中的数字与另一个数组进行对比,以找出找到多少个匹配项。定义上面的变量并打印下面的语句会导致“变量未初始化错误”,这是可以理解的。