`

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

阅读更多

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

分享到:
评论

相关推荐

    Android数据库内容变化的监听

    Android 数据库内容变化的监听机制是 Android 系统中一种重要的机制,通过 ContentResolver 类提供的三个方法,开发者可以轻松地监听数据库中的内容变化,并及时地更新应用程序的数据。 知识点: 1. ...

    java实现监听数据库源码

    在Java编程中,监听数据库的变化是一项重要的任务,特别是在实时数据处理和系统监控的场景下。以下将详细讲解如何使用Java实现数据库监听,并提供一个代码实例作为参考。 首先,要实现数据库监听,我们需要理解两种...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成excel,将excle表里面的数据保存到数据库.zip

    2. **数据准备**:从MySQL数据库中查询需要导出的数据,通常通过JDBC或MyBatis等ORM框架实现。 3. **使用EasyExcel写入数据**:调用EasyExcel.write方法,传入文件路径和映射的Java对象,然后遍历数据集,将每条数据...

    oracle数据库监听配置

    监听器是 Oracle 数据库服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。监听器的设置是在数据库服务器端完成的。监听器的主要功能是对客户端连接请求进行合法检查,如果连接请求有效,...

    使用SignalR实时推送数据库变化

    在描述的场景中,"使用SignalR实时推送数据库变化"是指构建一个系统,当数据库中的数据发生变化时,能够立即通知到客户端,而无需客户端频繁地查询数据库以获取最新状态。这对于实时应用,如股票交易、在线聊天或者...

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

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

    Android用listview显示数据库中的数据

    在Android开发中,将数据库中的数据展示在ListView上是一项常见的任务。这通常涉及到与后端服务器的交互,数据的获取,以及数据适配器的使用。以下是对这一过程的详细阐述: 首先,我们需要建立Android应用与后台...

    一个简单的监听器案例项目

    1. 自定义监听器类:开发者可能创建了实现上述接口之一或多个的自定义类,用于监听特定的事件并执行相应的操作。 2. 注册监听器:在web.xml配置文件中,我们需要将自定义的监听器类与对应的监听器接口关联,这样...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成exce

    在这个过程中,你可以自定义事件监听器,处理读取到的每一行数据。然后,根据这些对象的属性,构建SQL语句,通过JdbcTemplate或者MyBatis的SqlSession来执行插入操作,将数据存入数据库。 在整个过程中,需要注意...

    tomcat监听器

    4. **自定义监听器** 开发者可以创建自己的监听器类,只需让类实现相应的监听器接口,并覆盖接口中定义的方法。例如,实现`ServletContextListener`需要覆盖`contextInitialized`和`contextDestroyed`方法。 5. **...

    session监听小例子

    在Java Web开发中,Session是服务器用来跟踪用户状态的重要机制。...通过学习这个小例子,你可以更深入地理解如何在Java Web应用中使用Session监听器,并将其应用于自己的项目中,提升应用程序的管理和安全性。

    利用servlet监听器,系统启动时创建自定义容器简单例子

    在这个例子中,我们将探讨如何利用Servlet监听器在系统启动时创建一个自定义容器。 首先,我们需要了解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的类,这些接口定义了对Web应用生命...

    监听器源代码.zip

    3. **数据库连接池监听器**: 在数据库管理中,像C3P0或HikariCP这样的连接池库提供了连接创建和销毁的监听机制,帮助开发者监控和管理数据库连接资源。 4. **网络监听器**: 网络监听器通常用于监听网络连接和数据...

    Struts2的监听器的使用

    在实际应用中,我们可能需要自定义监听器来满足特定需求,例如: - **监控和日志记录**:创建一个监听器记录应用程序的启动和停止,或者跟踪特定事件,如Action的执行或异常情况。 - **资源初始化**:在应用程序...

    jndi 数据库连接池 & 监听

    在提供的"listener.rar"文件中,可能包含了自定义监听器的实现代码示例,这将有助于理解如何编写和注册监听器,以及它们在实际应用中的用途。 通过深入学习JNDI数据库连接池和监听器,开发者能够优化应用性能,更好...

    servlet监听器技术源码

    Servlet监听器技术是Java Servlet规范中的一项重要特性,它允许开发者在特定的Servlet容器事件发生时执行自定义的代码逻辑。这些事件可以包括Web应用程序的初始化、终止,或者是Servlet或Servlet上下文...

    Oracle数据库监听器(LISTENER)和本地服务名(Tnsname)配置.docx

    Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)配置 本文主要介绍 Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)的配置,旨在帮助读者了解 Oracle 网络连接配置的主要组件和配置方法。 一、监听器...

    JAVA Servlet监听器listener学习资料

    Java Servlet监听器(Listener)是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行自定义逻辑,而无需直接修改原有的业务代码。监听器是Servlet规范的一部分,通过实现特定的接口,开发者可以...

    j2ee20:servlet04监听器(监听四大web域)(用于访问人数的统计)、mvc模式的引入

    通过实现特定的接口,我们可以创建自定义监听器,以在Web应用的不同阶段介入并执行业务逻辑。 在"j2ee20:servlet04监听器(监听四大web域)"中,四大Web域指的是请求域、会话域、应用域和上下文域。这四个域提供了在...

Global site tag (gtag.js) - Google Analytics