mysql实体监听器_自定义监听器监听数据库中数据的变化

先写一个Event继承EventObject

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

package com.lbx.listong.servlet;

import java.util.EventListener;

public interface LocationListener extends EventListener {

public void locationEvent(LocationEvent le);

}

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

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的代码,主要是一些业务的代码,里面只写了增加一个记录触发一个事件

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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值