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);
        }
    }}
相关推荐
qq_334466865 分钟前
U9补丁同步的时候报错
数据库
施嘉伟8 分钟前
KSQL Developer 测试记录
数据库·kingbase
谱度众合12 分钟前
【蛋白互作研究】邻近标记PL-MS实验指南:如何精准获取目标蛋白的基因序列?
数据库·科技·蛋白质组学·药物靶点·生物科研
麦聪聊数据22 分钟前
生成测试数据(三):从建表到 CRUD 的冷启动
数据库·sql
Awkwardx25 分钟前
MySQL数据库—MySQL复合查询
数据库·mysql
2301_8002561126 分钟前
R-Tree创建与遍历,R-Tree在4类空间查询中的应用,实现4类空间查询的各类算法[第8章]
数据库·算法·机器学习·postgresql·r-tree
十月南城26 分钟前
分布式ID选型——雪花、号段、数据库自增与时钟回拨的风险控制
数据库·分布式
老邓计算机毕设26 分钟前
SSM校园快递代取平台32618(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·校园快递代取平台
论迹31 分钟前
【Redis】-- 单线程模型
数据库·redis·缓存
悦数图数据库32 分钟前
BOSS 直聘基于悦数图数据库构建智能根因定位平台的实践
数据库·人工智能