`

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

阅读更多

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

先写一个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();
	}
}
 

分享到:
评论

相关推荐

    自定义PROXOOL监听器整合SSH框架

    1、proxool官网,下载最新的proxool-...3、创建自定义数据库连接池监听 4、整合Struts2、Spring和proxool,配置Web服务启动配置文件[web.xml] 5、整合Spring和proxool,配置应用上下文配置文件[applicationContext.xml]

    java读取接码枪数据后台自动获取usb设备数据

    自动获取扫码枪数据,可自定义将扫码枪扫入数据写入数据库,和文件,可同时进行多个存储操作,附带项目使用教程,附带扫码枪模拟工具

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...

    使用注解导入导出各类多表头及各种导入数据验证的i简单工具类

    使用注解导入导出各类多表头,单表头,及各种导入数据验证(含非空,字符长度,数据包含与排他,正则验证及自定义验证(使用数据库操作)等)的i简单工具类

    campus-market_springboot_后台管理系统_stand3fu_数据权限控制_

    springboot框架原理、freemark模板标签语法、jpa数据库操作及自动建表、统一上传文件实现方法、自定义注解实现统一验证方法、权限拦截器实现权限统一管理、自定义分页插件封装、调用控制台命令对数据库进行自动备份...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:从数据库中加载 Job 等信息;配置和使用 JobStoreCMT;详细说明了在 quartz.propertis 中关于 JobStoreCMT 的配置属性。 第六章. Job 存储和持久化 (第六部分) 内容提要:为 JobStoreCMT 数据源;和 ...

    Springboot角色权限后台管理系统脚手架实战开发教程包含完整源码

    springboot框架原理、freemark模板标签语法、jpa数据库操作及自动建表、统一上传文件实现方法、自定义注解实现统一验证方法、权限拦截器实现权限统一管理、自定义分页插件封装、调用控制台命令对数据库进行自动备份...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--监听之EditText内容变化监听 |--监听之GridView条目点击监听 |--监听之ListView条目点击事件监听 |--监听之ListView滑动监听 |--监听之单击监听的两种定义 |--监听之双击监听 |--监听之电话状态监听 |--监听之...

    springboot 和一些主流框架的整合的各个基本demo

    Springboot-filter-listener-interceptor 过滤器、拦截器、监听器 Springboot-mongodb 与MongoDB 整合 Springboot-elasticsearch 与 Elasticsearch 整合 Springboot-i18n SpringBoot 国际化配置 SpringBoot-multi-...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例059 将数据库中的数据表添加到ListControl控件 实例060 利用ListControl控件浏览数据 实例061 利用ListControl控件制作导航界面 实例062 在列表视图中拖动视图项 实例063 利用列标题对列表视图进行数据排序...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例059 将数据库中的数据表添加到ListControl控件 实例060 利用ListControl控件浏览数据 实例061 利用ListControl控件制作导航界面 实例062 在列表视图中拖动视图项 实例063 利用列标题对列表视图进行数据排序...

    Hutuzhang-master.zip

    涉及到如下内容: 基础内容: ...单例模式,面板类与监听器类松耦合,Entity层设计,DAO层设计,Service层设计 业务常见处理手法: CRUD操作,配置信息,配置信息初始化,报表生成,一对多关系,多对一关系

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 cc实例212 删除单条数据 cc实例213 删除数据库中无用处的记录 8.5 视图 cc实例214 动态创建视图 cc...

    Spring Boot中文文档.rar

    28.4.1.Servlet,过滤器和监听器 注册Servlet,过滤器和监听器Spring Beans 28.4.2.Servlet上下文初始化 扫描Servlet,过滤器和侦听器 28.4.3.ServletWebServerApplicationContext 28.4.4.自定义...

Global site tag (gtag.js) - Google Analytics