关于网友提出的“ servlet定时器访问数据库NullPointerException”问题疑问,本网通过在网上对“ servlet定时器访问数据库NullPointerException”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: servlet定时器访问数据库NullPointerException
描述: 这个是访问数据库的程序
package com.cgwh.data;
import java.sql.*;
public class DataDispose {
public static void getDispose() {
Connection conn = null;
Statement st = null;
Statement stUpdate = null;
ResultSet rs = null;
String sql = "select * from userlist where ifoverdue = 'overdue'";
String sqlUpdate = "update userlist set ifoverdue = 'notoverdue'";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Verify", "root", "");
st = conn.createStatement();
rs = st.executeQuery(sql);
while(rs.next()) {
stUpdate = conn.createStatement();
stUpdate.executeUpdate(sqlUpdate);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stUpdate.close();
rs.close();
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这个是定时器的代码
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import com.cgwh.data.DataDispose;
import javax.servlet.http.HttpServlet;
public class DataTimer extends HttpServlet {
static {
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
}
}
class MyTask extends TimerTask {
public void run() {
DataDispose.getDispose();
}
}
程序的确执行成功,查看数据库得字段的确被改变。但是报出NullPointException,是怎么回事?
解决方案1: 以下代码判断下
rs.close();
st.close();
改成:
if(null != rs){
rs.close();
}
if(null != st){
st.close();
}
以上介绍了“ servlet定时器访问数据库NullPointerException”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2108122.html