oracle 中创建 socket客户端 监听数据库变动,返回数据给服务端!!!

目录

      • [socket客户端Java代码+ 函数+触发器](#socket客户端Java代码+ 函数+触发器)
      • 1、触发器
      • [2、 函数](#2、 函数)
      • [3、 java 代码](#3、 java 代码)
      • [1、socket ========================](#1、socket ========================)
          • [5-1 socket 服务端](#5-1 socket 服务端)

socket客户端Java代码+ 函数+触发器

复制代码
(当数据库数据变动是触发socket客户端代码,将信息发送到服务端)

应用场景 ---- 第三方往中间库导入数据,我需要将中间库的新数据进行定位操作。

1、触发器

sql 复制代码
 create or replace TRIGGER TRIGGER1 
AFTER INSERT OR UPDATE OF ID,NAME ON TEST 
for each row
declare
 reval varchar2(256);
 returnId varchar2(256);
BEGIN
  dbms_output.put_line('触发器开始执行');
IF inserting THEN 
	SELECT SENDDATA(:new.id) into returnId FROM DUAL; -- 调用socket函数
  insert into TM_QFI_DATA_TABLE(id,name) values(:new.id,'添加数据触发');
  
ELSIF updating THEN
  SELECT SENDDATA(:new.id)  into returnId FROM DUAL;-- 调用socket函数
insert into TM_QFI_DATA_TABLE(id,name) values(:new.id,'修改数据触发');

END IF;

 dbms_output.put_line(returnId+"触发器调用结束");
END;

2、 函数

sql 复制代码
CREATE OR REPLACE FUNCTION SENDDATA(dataid varchar2) 
RETURN VARCHAR2 AS 
language java 
name 'Client2.send(java.lang.String) return java.lang.String ';

3、 java 代码

java 复制代码
import java.io.IOException;  
import java.net.InetSocketAddress;  
import java.nio.ByteBuffer;  
import java.nio.channels.SocketChannel;  

public class Client2 {  
    //需要一个Selector   
    public static void send(String dataid) {  
        //创建连接的地址  
        InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8765);  
        //声明连接通道  
        SocketChannel sc = null;  
        //建立缓冲区  
        ByteBuffer buf = ByteBuffer.allocate(1024);  
        try {  
            //打开通道  
            sc = SocketChannel.open();  
            //进行连接  
            sc.connect(address);  
             
                //定义一个字节数组,然后使用系统录入功能:  
               byte[] bytes = dataid.getBytes("UTF-8");
                //把数据放到缓冲区中  
                buf.put(bytes);  
                //对缓冲区进行复位  
                buf.flip();  
                //写出数据  
                sc.write(buf);  
                //清空缓冲区数据  
                buf.clear();  
               
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if(sc != null){  
                try {  
                    sc.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}   

1、socket ========================

5-1 socket 服务端
java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ServeltSocketTest {
    public static void main(String[] args) throws IOException {
        //初始化服务端socket并且绑定9999端口
        ServerSocket serverSocket = new ServerSocket(8765);
        //创建一个线程池
        ExecutorService executorService = Executors.newFixedThreadPool(100);
        while (true) {
        //等待客户端的连接
            Socket socket = serverSocket.accept();
            Runnable runnable = () -> {
                BufferedReader bufferedReader = null;
                try {
                    bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
                    //读取一行数据
                    String str;
                    //通过while循环不断读取信息,
                    while ((str = bufferedReader.readLine()) != null) {
                        //输出打印
                        System.out.println("客户端说:" + str);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            };
            executorService.submit(runnable);
        }
    }}
相关推荐
野犬寒鸦9 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL1 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星2 小时前
sql语言之分组语句group by
java·数据库·sql