怎么实现数据库中某张表的数据改变后,即时推送到前台?

ian003 发布于 2013/12/05 14:44
阅读 3K+
收藏 2

怎么实现数据库中某张表的数据改变后(增删改的动作),即时推送到前台?

数据库是SQLSERVER2008,要求用触发器实现,项目是用JAVA写的,前台是jsp页面。

哪位好心人给点儿建议,来个DEMO。求指点!!!

加载中
1
redzl
redzl

触发器调用存储过程..

可以用系统的 sp_OACreate 存储过程创建XMLHTTP 不过这个做法太非主流了

ian003
ian003
回复 @redzl : 额,没看懂
redzl
redzl
回复 @甜到哀伤 : 那设置一下最佳回复呗[/偷笑]
ian003
ian003
回复 @redzl : 谢谢,感觉还不错
redzl
redzl
回复 @甜到哀伤 : 参见这篇文章:http://www.oschina.net/question/12_62630
ian003
ian003
触发器调用存储过程,这个能不能说具体点儿?
0
指尖的舞者
指尖的舞者

存的时候就可以处理了吧 

saveOrUpdate()

delete()

这不就实时得到这个对象了么。然后就直接推送到前台不就行了。

ian003
ian003
你只能检测数据库的变动,那个保存,修改,删除的方法你看不见的...
0
loonghere
loonghere

用ajax吧

ian003
ian003
定时调用?
0
水煮河蟹
水煮河蟹
定时查询?
ian003
ian003
是即时推送
ian003
ian003
不应该算是定时,想即时调用,不会啊
0
一枝独秀郑
有个方法有点麻烦,不过应该可行,首先用触发器调用存储过程,再用存储过程调用webservice,在webservice里面推送到前台
0
吐槽的达达仔
吐槽的达达仔
用ajax定时调度~~所谓实时,也是由前端发起的请求到后台的。。
0
独孤影
独孤影
用websocket
0
工程师爸爸
工程师爸爸

1、websocket(要浏览器支持) 

2、Ajax定时轮询  

3、类Ajax轮询,服务端等待更新 推送(搜Comet模型)

0
pcxsvl
pcxsvl

//要设计一个服务器端JAVA程序

//在服务器端嵌入卷游标cur

//并在数据库中创建

//触发器IDU和一个辅助表TABLE2

//当增删改TABLE1时触发器将时间存入TABLE2

//服务器端通过不停比较最后一个时间是否改变判断是否有人增删改

//如有在文本框中显示“有人增删改表TABLE1”

//下面是有关的代码段:

//在数据库中创建IDU触发器

//TABLE1是要监视的表

//TABLE2是数据库中用于记录增删改日期的表

CREATE TREGGER IDU

ON TABLE1

AFTER INSERT,DELETE,UPDATE

AS

INSERT INTO TABLE2 (DATE) VALUES GETDATE()

GO

//在JAVA务器端程序的主窗口加入下列代码

//定义共享变量

EXEC SQL BEGIN DECLARE SECTION;                 

     String oldDate,newDate;

EXEC SQL END DECLARE SECTION;

//定义指向TABLE2的卷游标cur

EXEC SQL DECLARE  cur SCROLL CURSOR FOR     

    SELECT DATE 

     FROM TABLE2

END_EXEC;

//打开卷游标cur,每打开一次

//执行一次卷游标cur的SELECT语句

EXEC SQL OPEN cur  END_EXEC;

//推进卷游标到TABLE2的

//最后一行(LAST)并把DATE赋给

//oldDate为共享变量

EXEC SQL LAST FROM cur INTO :oldDate  END_EXEC;

//JAVA务器 端程序的服务器线程的run()方法中加入下列代码

while(true){

      EXEC SQL OPEN cur;

      END_EXEC

      EXEC SQL LAST FROM cur INTO :newDate;

      END_EXEC

     if(!(newDate.equals(oldDate)){

          text.setText("有人增删改了解表TABLE1");

           oldDate=newDate.clone();

      }

}

EXEC SQL CLOSE cur  END_EXEC;


0
idoz
idoz
 同意2楼的方法,aop这个save()方法即可。
返回顶部
顶部