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);
        }
    }}
相关推荐
失散1312 分钟前
分布式专题——1.1 Redis单机、主从、哨兵、集群部署
java·数据库·redis·分布式·架构
2301_7795037621 分钟前
MySQL集群高可用架构---mysql高可用之组复制 (MGR)
数据库·mysql·架构
Hello.Reader40 分钟前
一文通关 Proto3完整语法与工程实践
java·linux·数据库·proto3
c萱1 小时前
软件测试错题笔记
软件测试·数据库·笔记·测试工具·oracle·测试用例
長琹1 小时前
AES加密算法详细加密步骤代码实现--身份证号码加解密系统
网络·数据库·人工智能·python·密码学
只因在人海中多看了你一眼2 小时前
B.50.10.06-NoSQL数据库与电商应用
数据库·nosql
烟雨归来2 小时前
3 个 ASM 磁盘故障案例,从故障诊断到解决方案
数据库·oracle
时序数据说3 小时前
时序数据库IoTDB的六大实用场景盘点
大数据·数据库·物联网·时序数据库·iotdb
MyFreeIT3 小时前
MySQL Function
数据库·mysql
白鹭3 小时前
MySQL主从复制进阶(GTID复制,半同步复制)
linux·运维·数据库·mysql·集群