目录
-
-
- [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);
}
}}