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);
        }
    }}
相关推荐
这个DBA有点耶6 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
这个DBA有点耶8 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技9 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend9 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence13 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
先吃饱再说1 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils1 天前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend1 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶1 天前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung1 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql