2014-04-02 108 views
0

我正在构建一个应用程序,每分钟查询一次数据库。我使用TimerTask类来查询数据库。该方法工作了一段时间,并完全停止。我该怎么办?这里的下面TimerTask没有运行

public class DateMgr extends TimerTask{ 
     static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
     static final String DB_URL = "jdbc:mysql://localhost:3306/reminder"; 
     static final String USER = "username"; 
     static final String PASS = "password"; 
     @Override 
     public void run(){ 
      Statement stmt = null; 
      Connection conn = null; 

      try{ 

       DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm"); 
       //get current date time with Date() 
       Date d = new Date(); 

       String m = dateFormat.format(d); 
       String s = m + ":00.0"; 
       System.out.println(dateFormat.format(s)); 
       //STEP 2: Register JDBC driver 
       Class.forName("com.mysql.jdbc.Driver"); 

       //STEP 3: Open a connection 
       System.out.println("Connecting to a selected database..."); 
       conn = DriverManager.getConnection(DB_URL, USER, PASS); 
       System.out.println("Connected database successfully..."); 

       //STEP 4: Execute a query 
       System.out.println("Creating statement..."); 

       stmt = conn.createStatement(); 
       String sql = "SELECT * FROM reminder.list"; 
       ResultSet rs = stmt.executeQuery(sql); 
       //STEP 5: Extract data from result set 
       while(rs.next()){ 
        //Retrieve by column name 
        int id = rs.getInt("id"); 
        String message = rs.getString("Message"); 
        String when = rs.getString("When");            
        System.out.println("Time for " + message + " At " + when); 
       } 
       rs.close();           
      }catch (Exception e){     
      } 
     }   
    } 

的代码,这是Timer类与main()方法

public class Reminder { 
    Timer timer; 

    public Reminder(int seconds) { 
     timer = new Timer(); 
     timer.schedule(new DateMgr(), 0, seconds*1000); 
    } 
    public static void main (String args[]){ 
     new Reminder(20); 
    }   
} 
+0

你吞下'Exception'(因此所有未经检查的异常,包括NPE)并且什么也不做?至少在某处打印堆栈跟踪;没有这些,没有诊断是可能的 – fge

回答

0

您:

  1. “处理” 与空块所有的异常;
  2. 没有finally您释放数据库资源的位置;
  3. 即使在“愉快的一天”的情况下也没有任何应该关闭数据库连接的代码行。

程序停止工作,因为每次任务运行时,都会挂起一个数据库连接。很快,没有更多的连接要获得,但是你不知道这个,因为你决定不记录这个异常。