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

devtools/2025/3/16 14:12:19/

目录

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

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

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

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

1、触发器

在这里插入图片描述

 create or replace TRIGGER TRIGGER1 
AFTER INSERT OR UPDATE OF ID,NAME ON TEST 
for each row
declarereval varchar2(256);returnId varchar2(256);
BEGINdbms_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 THENSELECT 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、 函数

在这里插入图片描述

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

3、 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 服务端

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);}}}

http://www.ppmy.cn/devtools/167579.html

相关文章

大模型AI多智能体系统(Multi-Agent Systems, MAS)技术介绍

一、多智能体系统的定义与核心概念 多智能体系统(MAS)是由多个具备自主决策能力的智能体(Agent)组成的分布式系统。每个智能体能够感知环境、执行动作,并通过协作或竞争实现个体或集体目标。其核心特征包括: 自主性:智能体无需外部指令即可独立决策(如MetaGPT中的角色…

Java中类和对象

类和对象 面向对象的认识类的定义和使用1 类的定义2 类的创建3 类的实例化 构造方法1 构造方法的概念2 构造方法的注意事项 this关键字 面向对象的认识 前言 何为面向对象何为面向过程呢?,C语言是最经典的面向过程的语言,但是C语言虽然可以解决一定的问…

设计模式之美

UML建模 统一建模语言(UML)是用来设计软件的可视化建模语言。它的语言特点是简单 统一 图形化 能表达软件设计中的动态与静态信息。 UML的分类 动态结构图: 类图 对象图 组件图 部署图 动态行为图: 状态图 活动图 时序图 协作…

20250315在windows10下开热点步骤

20250315在windows10下开热点步骤 2025/3/15 16:05 百度:win10 开热点 DESKTOP-2D4GDGB 4175 13572468 win10怎么打开移动热点 播报文章 原创|浏览:3402|更新:2023-07-20 13:42 win10怎么打开移动热点1win10怎么打开移动热点2win10怎么打开移…

Certbot实现SSL免费证书自动续签(CentOS 7 + nginx/apache)

在 CentOS 上,你可以使用 Let’s Encrypt 提供的 Certbot 工具来申请和自动续约免费的 SSL 证书。 1. 安装 Certbot CentOS 7 安装 EPEL 和 Certbot yum install -y epel-release yum install -y certbot python3-certbot-nginx如果使用的是 Apache: …

【PyCharm2024】一些好用的小功能

目录 一、全局查找及替换关键字 方法一: 方法二: 二、调整字体大小 三、调整Terminal的字体大小 四、改变行注释的斜体以及颜色 一、全局查找及替换关键字 编写程序时,通常想要在所有文件中查找或者替换某个词。 方法一: …

使用Fluent-bit将容器标准输入和输出的日志发送到Kafka

什么是fluent-bit? Fluent Bit 是一款开源的轻量级日志处理器与转发器,专为嵌入式系统、容器化环境及分布式架构设计。其核心功能包括日志收集、过滤、聚合和传输,支持多种输入源(如文件、系统日志、HTTP接口)和输出目…

PAT甲级(Advanced Level) Practice 1020 Tree Traversals

原题 1020 Tree Traversals - PAT (Advanced Level) Practice 题目大意 输入n表示二叉树的元素数量,再分别输入该树的后序和中序遍历,输出该树的层序遍历。 解题思路 想了很久也没想出来怎么直接把后序中序转化为层序,大家如果有直接转化…