0
点赞
收藏
分享

微信扫一扫

Database Change Notification

奋斗De奶爸 2022-06-14 阅读 56

使用java监控oracle数据库的变化,主要是针对表数据,如果发生变化,使用select去查询,能够达到推送的目的

 

1 package com.test.notifi;
2
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.sql.Statement;
6 import java.util.Properties;
7 import oracle.jdbc.OracleConnection;
8 import oracle.jdbc.OracleDriver;
9 import oracle.jdbc.OracleStatement;
10 import oracle.jdbc.dcn.DatabaseChangeEvent;
11 import oracle.jdbc.dcn.DatabaseChangeListener;
12 import oracle.jdbc.dcn.DatabaseChangeRegistration;
13 import oracle.jdbc.pool.OracleDataSource;
14
15 public class TestNotification {
16
17 public void run(){
18 OracleDataSource dataSource;
19 try {
20 dataSource = new OracleDataSource();
21 dataSource.setUser("hw");
22 dataSource.setPassword("112311");
23 dataSource.setURL("jdbc:oracle:thin:@198.22.1.4:1521:COPYDB1");
24 OracleConnection conn = (OracleConnection) dataSource.getConnection();
25
26 Properties prop = new Properties();
27 prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS,"true");
28 prop.setProperty(OracleConnection.DCN_QUERY_CHANGE_NOTIFICATION,"true");
29 DatabaseChangeRegistration dcr = conn.registerDatabaseChangeNotification(prop);
30
31 DCNDemoListener list = new DCNDemoListener(this);
32 dcr.addListener(list);
33
34 Statement stmt = conn.createStatement();
35
36 ((OracleStatement)stmt).setDatabaseChangeRegistration(dcr);
37 // ResultSet rs = stmt.executeQuery("select * from hs_secu.entrust a where a.fund_account = '610005385'");
38 ResultSet rs = stmt.executeQuery("select * from stocc");
39 while (rs.next())
40 {}
41 String[] tableNames = dcr.getTables();
42 for(int i=0;i<tableNames.length;i++)
43 System.out.println(tableNames[i]+" is part of the registration.");
44 rs.close();
45 stmt.close();
46 conn.close();
47 } catch (SQLException e) {
48 // TODO Auto-generated catch block
49 e.printStackTrace();
50
51 }
52 }
53
54 public static void main(String[] a) {
55 TestNotification notification = new TestNotification();
56 notification.run();
57 }
58
59 }

 

1 package com.test.notifi;
2
3 import oracle.jdbc.dcn.DatabaseChangeEvent;
4 import oracle.jdbc.dcn.DatabaseChangeListener;
5
6 class DCNDemoListener implements DatabaseChangeListener
7 {
8 TestNotification demo;
9 DCNDemoListener(TestNotification dem)
10 {
11 demo = dem;
12 }
13 public void onDatabaseChangeNotification(DatabaseChangeEvent e)
14 {
15 Thread t = Thread.currentThread();
16 System.out.println("DCNDemoListener: got an event ("+this+" running on thread "+t+")");
17 System.out.println(e.toString());
18 synchronized( demo ){ demo.notify();}
19 }
20 }

使用windows机器去运行这个程序的时候,请注意,hostname需要添加自己的IP和主机名称

例如:  198.28.1.2 TIM-PC

这样oracle数据库才能知道是谁注册的

 



作者:少帅

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者所有,欢迎转载,但请保留该声明。

举报

相关推荐

0 条评论