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

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

先写一个Event继承EventObject
Java代码   收藏代码
  1. package com.lbx.listong.servlet;  
  2.   
  3. import java.util.EventObject;  
  4.   
  5. public class LocationEvent extends EventObject {  
  6.       
  7.     private static final long serialVersionUID = 1L;  
  8.     private Object obj;  
  9.   
  10.     public LocationEvent(Object source) {  
  11.         super(source);  
  12.         obj = source;  
  13.     }  
  14.   
  15.     public Object getSource(){  
  16.         return obj;  
  17.     }  
  18.       
  19. }  
 然后写一个接口继承EventListener
Java代码   收藏代码
  1. package com.lbx.listong.servlet;  
  2.   
  3. import java.util.EventListener;  
  4.   
  5. public interface LocationListener extends EventListener {  
  6.       
  7.     public void locationEvent(LocationEvent le);  
  8.   
  9. }  
 测试这个监听,实现他的接口
Java代码   收藏代码
  1. package com.lbx.listong.servlet;  
  2.   
  3. import java.util.concurrent.Executors;  
  4. import java.util.concurrent.ScheduledExecutorService;  
  5. import java.util.concurrent.TimeUnit;  
  6.   
  7. import com.lbx.listong.service.LocationService;  
  8. import com.lbx.listong.thread.ListThread;  
  9.   
  10. public class TestLocationListener implements LocationListener {  
  11.   
  12.     private LocationService ls;  
  13.   
  14.     public TestLocationListener() {  
  15.         ls = new LocationService();  
  16.         ls.addLocationListener(this);                     //注册监听  
  17.         System.out.println("添加监听器完毕");  
  18.         try {  
  19.             // 调用此方法触发事件,触发的事件就是执行locationEvent(接口的方法)的方法  
  20.             ls.addLocation("insert into tb_location (companyId,mobile,longitude,latitude,locationTime) values(2,'444','4','4','2011-03-23 11:03:04')");  
  21.         } catch (Exception ex) {  
  22.             ex.printStackTrace();  
  23.         }  
  24.     }  
  25.   
  26.     @Override  
  27.     public void locationEvent(LocationEvent le) {  
  28.         // TODO Auto-generated method stub  
  29.         ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();   
  30.         executor.scheduleWithFixedDelay(new ListThread(), 02, TimeUnit.SECONDS);  
  31.     }  
  32.   
  33. }  
 LocationService的代码,主要是一些业务的代码,里面只写了增加一个记录触发一个事件
Java代码   收藏代码
  1. package com.lbx.listong.service;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7. import java.util.ArrayList;  
  8. import java.util.Enumeration;  
  9. import java.util.List;  
  10. import java.util.Vector;  
  11.   
  12. import com.lbx.listong.DBUtil.DB;  
  13. import com.lbx.listong.servlet.LocationEvent;  
  14. import com.lbx.listong.servlet.LocationListener;  
  15. import com.lbx.listong.servlet.TestLocationListener;  
  16.   
  17. public class LocationService {  
  18.     private Connection conn = null;  
  19.     List list = new ArrayList();  
  20.     String sql = "select * from tb_location";  
  21.     Statement st = null;  
  22.   
  23.     private Vector repository = new Vector();  
  24.     private LocationListener ll;  
  25.     public LocationService()  
  26.     {  
  27.     }  
  28.     //注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题  
  29.     public void addLocationListener(LocationListener ll)  
  30.     {  
  31.         repository.addElement(ll);//这步要注意同步问题  
  32.     }  
  33.     //如果这里没有使用Vector而是使用ArrayList那么要注意同步问题  
  34.     public void notifyLocationEvent(LocationEvent event) {  
  35.         Enumeration e = repository.elements();//这步要注意同步问题  
  36.         while(e.hasMoreElements())  
  37.         {  
  38.           ll = (LocationListener)e.nextElement();  
  39.           ll.locationEvent(event);  
  40.         }  
  41.     }  
  42.     //删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题  
  43.     public void removeLocationListener(LocationListener ll)  
  44.     {  
  45.         repository.remove(ll);//这步要注意同步问题  
  46.     }  
  47.       
  48.     public List getLocationList(){  
  49.         conn = DB.getConnection();  
  50.         try {  
  51.             st = conn.createStatement();  
  52.             ResultSet rs = st.executeQuery(sql);  
  53.             while(rs.next()){  
  54.                 String longitude = rs.getString("longitude");  
  55.                 list.add(longitude);  
  56.             }  
  57.         } catch (SQLException e) {  
  58.             // TODO Auto-generated catch block  
  59.             e.printStackTrace();  
  60.         }   
  61.         return list;  
  62.     }  
  63.       
  64.     public void addLocation(String sql){  
  65.         boolean b = false;  
  66.         conn = DB.getConnection();  
  67.         try {  
  68.             st = conn.createStatement();  
  69.             int id = st.executeUpdate(sql);  
  70.             if(id>0){  
  71.                 b = true;  
  72.             }  
  73.         } catch (SQLException e) {  
  74.             // TODO Auto-generated catch block  
  75.             e.printStackTrace();  
  76.         }  
  77.         //添加一个记录成功就通知事件,然后执行接口的方法  
  78.         if(b){  
  79.             System.out.println("sss");  
  80.             notifyLocationEvent(new LocationEvent(this));  
  81.         }  
  82.     }  
  83.       
  84.     public static void main(String[] args){  
  85.         new TestLocationListener();  
  86.     }  
  87. }  
 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页