conn = db.getConnection();
//撤销注册
String sql = "select * from dba_change_notification_regs";
Statement statement = conn.createStatement();
rs = statement.executeQuery(sql);
List<String> listCallBack = new ArrayList<String>();
List list = new ArrayList();//用来存放最后无重复项的数据
HashSet h ;//用来去除重复项
InetAddress addr=InetAddress.getLocalHost();//获取本机ip
String localIp=addr.getHostAddress();//获取本机ip
while(rs.next()){
String s = rs.getString("CALLBACK");
String s2 = s.substring(s.indexOf("HOST=")+5, s.indexOf(")(PORT="));
listCallBack.add(s2);
h = new HashSet(listCallBack);
list.clear();//清除
list.addAll(h);//去除重复项
}
if(!list.contains(localIp)){//如果未注册过再注册
//dcr = ((OracleConnection) conn).registerDatabaseChangeNotification(prop);
System.out.println("------------------------没注册过");
}
System.out.println("------------------------注册过");
//删除以前注册过的监听
logger.info("---------localIp-----开始----------");
InetAddress addr=InetAddress.getLocalHost();//获取本机ip
String localIp=addr.getHostAddress();//获取本机ip
logger.info("---------localIp---------------"+localIp);
//撤销本机的注册记录
String sql = "select distinct regid from dba_change_notification_regs where CALLBACK like '%"+localIp+"%'";
statement = conn.createStatement();
rs = statement.executeQuery(sql);
List<Integer> regIds = new ArrayList();
while(rs.next()){
regIds.add((Integer)rs.getInt("regid"));
}
if(regIds!=null){//如果本机注册过就删除掉,注意只删除本地机注册的
for(Integer i:regIds){
((OracleConnection) conn).unregisterDatabaseChangeNotification(i);
}
}