有一张表T_a 两个字段Id,XXX。
数据会不断的增加,Id自增。
需求每隔十秒过来读一次,然后记下读到哪个Id了,记下来。如果数据增加了,然后下一次来就接着读。那么这个Id要存在哪里合适呢?肯定是要一个静态的成员变量。
另外没十秒读一次,怎么实现合适呢?起一个线程然后sleep?那connection用不用释放呢?
高手帮忙分析下好不?

解决方案 »

  1.   

    因为我在网吧,所以没法测试;只能手写着试一试。public int Id=0;
    public boolean Executive=true;//定义变量是否执行读取数据
    public static void findData(){
        string sql="select * from T_a where id>"+Id;
        //假设Connection:con、PreparedStatement:ps、ResultSet:rs对象已准备好
         while(rs.next())
         {
              Id=rs.getInt("id");//Id在这里会接收到最后一条数据的Id
             .....
         }
         rs.close();
         con.close();//最好要关闭资源
    }public static void timeSleep()
    {
        while(Executive)
        {
         findData();
         Thread.sleep(10000);// 此线程延迟10秒
        }}public static void mian(String args[]){  timeSleep();
      //如果想停止读取可以修改Executive为false;
       }
      

  2.   

    我记得java中有个定时器线程Timer,用那个就可以吧
      

  3.   

    服务器总要重启的吧,所以id信息保存到一个表里还是有必要的。定时可以用Timer,如果用spring,cron表达式也很好用,当然cron也可以独立使用good luck
      

  4.   

    也可以用定时任务Quartz  
    设置间隔为10秒就可以了 
    取数据的用3楼的就可以
      

  5.   

    用spring的定时器做吧,应该比较好,从性能和机制上应该都不错!你可以到网上搜搜!
      

  6.   


    import java.util.Timer;
    import java.util.TimerTask;public class TimeTask {   
       
        public static void main(String[] args) { 
            TimeTask tTask=new TimeTask();
            tTask.timeVoid();
        }
        
        public void timeVoid(){
            final Timer timer = new Timer();
            TimerTask tt=new TimerTask() { 
                @Override
                public void run() {
                    System.out.println("到点啦!");
                    timer.cancel();
                }
            };
            timer.schedule(tt, 10000);
        }
    }网上的方法,参考一下
      

  7.   

    上面有问题,修正了一下
    public class TreeSetDemo {
    public static void main(String[] args) {
    TreeSetDemo tTask=new TreeSetDemo();
            tTask.timeVoid(); }

    public void timeVoid(){
            final Timer timer = new Timer();
            TimerTask tt=new TimerTask() { 
                @Override
                public void run() {
                    System.out.println("到点啦!");
                   // timer.cancel();
                }
            };
            timer.schedule(tt, 1000,1000);//从一秒后开始,每隔一秒执行一次
        }}
      

  8.   

    一般来说数据库访问容易成为程序瓶颈,况且您的数据还在不断增长。而且当数据增长很快的时候,您的应用也不能及时得到最新的数据。
    如果用定时轮询,那么要涉及thread控制,在j2ee环境里面开thread也不是容易的事情。
    所以轮询数据库不是好的办法。如果是同一个应用在insert数据,那就在insert的时候做逻辑;
    如果是另外一个应用在insert数据,那可以考虑让那个应用通知您的应用去读数据。
      

  9.   

    可以把ID放到缓存里, 缓存的写法百度一下。 每10秒访问一次数据库的话, 用Thread 的sleep方法吧。 这个过程中connection不要释放。
      

  10.   

    用timer就可以来定时执行
    int delay = 1000*5; //milliseconds
    Timer time = new Timer();
    TimerTask task = new TimerTask(){
             public void run(){
             try{
             //Thread.sleep(10000);
             }catch(Exception e){
             e.printStackTrace();
             }
             }
             };
    time.schedule(task, delay,1000*60*60);