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