您的位置:首页 > 数据库

自定义监听器监听数据库中数据的变化

2014-03-04 15:10 211 查看

此程序只是一个简单的例子,主要监听数据库中Location的数据。

先写一个Event继承EventObject

Java代码  


package com.lbx.listong.servlet;  
  
import java.util.EventObject;  
  
public class LocationEvent extends EventObject {  
      
    private static final long serialVersionUID = 1L;  
    private Object obj;  
  
    public LocationEvent(Object source) {  
        super(source);  
        obj = source;  
    }  
  
    public Object getSource(){  
        return obj;  
    }  
      
}  

 然后写一个接口继承EventListener

Java代码  


package com.lbx.listong.servlet;  
  
import java.util.EventListener;  
  
public interface LocationListener extends EventListener {  
      
    public void locationEvent(LocationEvent le);  
  
}  

 测试这个监听,实现他的接口

Java代码  


package com.lbx.listong.servlet;  
  
import java.util.concurrent.Executors;  
import java.util.concurrent.ScheduledExecutorService;  
import java.util.concurrent.TimeUnit;  
  
import com.lbx.listong.service.LocationService;  
import com.lbx.listong.thread.ListThread;  
  
public class TestLocationListener implements LocationListener {  
  
    private LocationService ls;  
  
    public TestLocationListener() {  
        ls = new LocationService();  
        ls.addLocationListener(this);                     //注册监听  
        System.out.println("添加监听器完毕");  
        try {  
            // 调用此方法触发事件,触发的事件就是执行locationEvent(接口的方法)的方法  
            ls.addLocation("insert into tb_location (companyId,mobile,longitude,latitude,locationTime) values(2,'444','4','4','2011-03-23 11:03:04')");  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
  
    @Override  
    public void locationEvent(LocationEvent le) {  
        // TODO Auto-generated method stub  
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();   
        executor.scheduleWithFixedDelay(new ListThread(), 0, 2, TimeUnit.SECONDS);  
    }  
  
}  

 LocationService的代码,主要是一些业务的代码,里面只写了增加一个记录触发一个事件

Java代码  


package com.lbx.listong.service;  
  
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.ArrayList;  
import java.util.Enumeration;  
import java.util.List;  
import java.util.Vector;  
  
import com.lbx.listong.DBUtil.DB;  
import com.lbx.listong.servlet.LocationEvent;  
import com.lbx.listong.servlet.LocationListener;  
import com.lbx.listong.servlet.TestLocationListener;  
  
public class LocationService {  
    private Connection conn = null;  
    List list = new ArrayList();  
    String sql = "select * from tb_location";  
    Statement st = null;  
  
    private Vector repository = new Vector();  
    private LocationListener ll;  
    public LocationService()  
    {  
    }  
    //注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题  
    public void addLocationListener(LocationListener ll)  
    {  
        repository.addElement(ll);//这步要注意同步问题  
    }  
    //如果这里没有使用Vector而是使用ArrayList那么要注意同步问题  
    public void notifyLocationEvent(LocationEvent event) {  
        Enumeration e = repository.elements();//这步要注意同步问题  
        while(e.hasMoreElements())  
        {  
          ll = (LocationListener)e.nextElement();  
          ll.locationEvent(event);  
        }  
    }  
    //删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题  
    public void removeLocationListener(LocationListener ll)  
    {  
        repository.remove(ll);//这步要注意同步问题  
    }  
      
    public List getLocationList(){  
        conn = DB.getConnection();  
        try {  
            st = conn.createStatement();  
            ResultSet rs = st.executeQuery(sql);  
            while(rs.next()){  
                String longitude = rs.getString("longitude");  
                list.add(longitude);  
            }  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }   
        return list;  
    }  
      
    public void addLocation(String sql){  
        boolean b = false;  
        conn = DB.getConnection();  
        try {  
            st = conn.createStatement();  
            int id = st.executeUpdate(sql);  
            if(id>0){  
                b = true;  
            }  
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        //添加一个记录成功就通知事件,然后执行接口的方法  
        if(b){  
            System.out.println("sss");  
            notifyLocationEvent(new LocationEvent(this));  
        }  
    }  
      
    public static void main(String[] args){  
        new TestLocationListener();  
    }  
}  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: