2012-6-4 19:32:30 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [KeepWarningServlet] in context with path [/BDPS] threw exception
java.lang.NullPointerException
at com.site.dao.WarningDao.warningList(WarningDao.java:24)
at com.site.servlet.KeepWarningServlet.doGet(KeepWarningServlet.java:61)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
我的代码:
WarningDao.java
public ArrayList<Warning> warningList(){//返回所有未警告的Warning
DBC dbc=new DBC();
dbc.createCon();
ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning=0");
ArrayList<Warning> arraylist = new ArrayList<Warning>();
try {
while(result.next()){
Warning temp = new Warning();
temp.setSensorName(result.getString("sensorName"));
temp.setSensorNum(result.getInt("sensorNum"));
temp.setDataName(result.getString("dataName"));
temp.setValue(result.getDouble("value"));
temp.setDate(result.getString("date").trim());
temp.setTime(result.getString("time").trim());
arraylist.add(temp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbc.close();
return arraylist;
}问题是:我程序是每10S调用一次该方法,程序运行时前面几十秒能够正常运行,查询数据库正常,运行一段时间后就出现该异常,求解。
我是在servlet中调用的
严重: Servlet.service() for servlet [KeepWarningServlet] in context with path [/BDPS] threw exception
java.lang.NullPointerException
at com.site.dao.WarningDao.warningList(WarningDao.java:24)
at com.site.servlet.KeepWarningServlet.doGet(KeepWarningServlet.java:61)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
我的代码:
WarningDao.java
public ArrayList<Warning> warningList(){//返回所有未警告的Warning
DBC dbc=new DBC();
dbc.createCon();
ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning=0");
ArrayList<Warning> arraylist = new ArrayList<Warning>();
try {
while(result.next()){
Warning temp = new Warning();
temp.setSensorName(result.getString("sensorName"));
temp.setSensorNum(result.getInt("sensorNum"));
temp.setDataName(result.getString("dataName"));
temp.setValue(result.getDouble("value"));
temp.setDate(result.getString("date").trim());
temp.setTime(result.getString("time").trim());
arraylist.add(temp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbc.close();
return arraylist;
}问题是:我程序是每10S调用一次该方法,程序运行时前面几十秒能够正常运行,查询数据库正常,运行一段时间后就出现该异常,求解。
我是在servlet中调用的
解决方案 »
- spring配置上传文件大小,问题!
- 如何把Tomcat导入到Eclipse中???
- 小弟是初学者,请指教……关于联数据库SqlServer的问题
- 做网站的时候,什么时候,判断字符串是不是null或者空啊
- 那位有JSP分页(按时间分页)程序,每页显示一天的,可否指教?
- 实现log4j输出web启动信息
- 从JSP中取到的客户端输入信息存放在servlet的公有变量中的做法有问题把,这样要是又有一个客户端输入了信息,会把上个变量冲掉了把
- 我现在学习JAVA和JSP有一定时间了,有个结构上的问题想问问大家。
- jsp中如何获得ASCII码?
- java.lang.NoClassDefFoundError求大神帮忙
- weblogic连接池不释放连接,当前连接数current capacity只增不减
- 谁解决过hessian Bigdecimal的序列化问题(java与c#互调)
估计就是result 为null时产生的错误,前多少秒是正常的,不代表后面也是正常吧?具体逻辑不清楚,也可能result在一个时间时确实为null呢?while(result.next()) 前加个判断:if(result != null){
while(result.next()) {
.....
.....
}
}
不然就debug下看看。
at com.site.dao.WarningDao.warningList(WarningDao.java:24)请问24行是哪行?
比较怀疑是这两行:
temp.setDate(result.getString("date").trim());
temp.setTime(result.getString("time").trim());
如果result.getString("date")返回是null的话,那么调用其trim()必然就会出空指针错误。
应该加个''号吧
ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning='0'");
at com.site.servlet.KeepWarningServlet.doGet(KeepWarningServlet.java:61)DBC dbc=new DBC();
dbc.createCon(); //这里估计需要判断一下 ,创建一个连接是否成功,为什么不在DBC用一个连接的静态变量 ,避免每次都创建 ? 而且还有可能创建连接失败 ?
ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning=0");
ArrayList<Warning> arraylist = new ArrayList<Warning>();try {
while((result != null) && result.next()){ //判断是否为空
Warning temp = new Warning();
temp.setSensorName(result.getString("sensorName"));
temp.setSensorNum(result.getInt("sensorNum"));temp.setDataName(result.getString("dataName"));
temp.setValue(result.getDouble("value"));temp.setDate(result.getString("date").trim());
temp.setTime(result.getString("time").trim());
arraylist.add(temp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbc.close();
return arraylist;
}