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

此程序只是一个简单的例子,主要监听数据库中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. }  
 

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Java监听DB2数据库表的数据变化可以通过使用数据库触发器和JDBC技术实现。 首先,你需要在DB2数据库创建一个触发器,以便在表数据发生变化时触发相应的动作。触发器可以通过在表上的INSERT、UPDATE和DELETE操作上定义来响应数据变化。你可以使用DB2的触发器编程语言(SQL PL)来编写触发器。 比如,你可以创建一个触发器,以在表的UPDATE操作上触发一个动作。这个动作可以是将相关数据插入到另一个表,或者向Java应用程序发送通知等等。触发器的定义可能类似于以下示例: CREATE TRIGGER my_trigger AFTER UPDATE ON my_table FOR EACH ROW MODE DB2SQL BEGIN ATOMIC -- 触发的动作 END 然后,你需要在Java代码使用JDBC连接到DB2数据库,并通过数据库的事件通知机制注册对数据变化监听。 你可以使用DB2的JDBC驱动程序提供的方法来注册监听器,这个方法可能类似于以下示例: Connection conn = DriverManager.getConnection("jdbc:db2://localhost:50000/mydb", "username", "password"); DatabaseChangeRegistration dcr = conn.getMetaData().getDatabaseChangeRegistration(); dcr.addTableChangeListener("schema", "my_table", new MyChangeListener()); MyChangeListener类是自定义实现了TableChangeListener接口的监听器类。在MyChangeListener类,你可以实现TableChangeListener接口的方法来处理数据变化事件。 通过这种方式,你可以监听DB2数据库表的数据变化,并在数据变化发生时执行相应的Java代码逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值