首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimerTask不运行

TimerTask不运行
EN

Stack Overflow用户
提问于 2014-04-02 07:28:19
回答 1查看 309关注 0票数 0

我正在构建一个应用程序,它每分钟都会查询一次数据库。我使用TimerTask类查询数据库。这种方法工作了一段时间,完全停止了。我做什么好?下面是代码

代码语言:javascript
复制
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){                
            }
        }        
    }

这是带main()方法的Timer类

代码语言:javascript
复制
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);
    }          
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-02 07:51:03

你:

  1. “处理”空块的所有异常;
  2. 在发布数据库资源时没有finally
  3. 没有任何代码可以关闭数据库连接,即使在“愉快的一天”场景中也是如此。

您的程序停止工作,因为每次任务运行时,都会有一个数据库连接挂起。很快就没有更多的连接可以获取,但是您没有被告知这一点,因为您决定不记录异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22804359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档