IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> (超详细)Java实时同步Oracle11g数据 -> 正文阅读

[Java知识库](超详细)Java实时同步Oracle11g数据

目录

说明:

操作流程:

1、搭建Socket服务端

2、通过Navicat Premium 编写Socket客户端(连接Oracke11g)

2.1 【其他】→【java】→【新建java】(保存后,右键JavaSource→【维护】→【编译或解析】【没有红色标记即可】)?

3、创建存储过程(【函数】→【新建函数】。保存后,右键过程→【维护】→【编译】【没有红色标记即可】)

??4、右键表名→【设计表】→【选择触发器】

5、添加权限(ctrl+R→cmd→输入sqlplus username/password)

?6、运行Socket服务端,操作表进行测试


说明:

? ? ? ? 通过oracle11g自带JDK1.5发送Socket;1、数据库数据新增触发器→2、在数据新增时触发操作→3、调用存储过程或函数→4、函数调用java程序→5、通过oracle自带JDK运行java程序发送Socket到Socket服务端进行业务处理。

操作流程:

1、搭建Socket服务端

Server.java

/**
 * 服务器启动类
 */
public class Server {


    public static void main(String[] args) {
      new Server().start();
    }

    public void start(){
        ServerSocket server = null;
        Socket socket = null;
        try {
            server = new ServerSocket(60000);
            System.out.println("服务器已经开启, 监听端口:" + 60000);
            ThreadPoolExecutor pool = new ThreadPoolExecutor(
                    10,
                    30,
                   20,
                    TimeUnit.SECONDS,
                    new ArrayBlockingQueue<Runnable>(10),
                    new ThreadPoolExecutor.DiscardOldestPolicy()
            );
            while (true) {
                socket = server.accept();
                pool.execute(new ServerThread(socket,socketService));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
ServerThread.java
/**
 * 服务器线程的作用主要是:
 * 1.接收来自客户端的信息
 * 2.将接收到的信息解析,并转发给目标客户端
 */
public class ServerThread extends Thread {


    private Socket socket;
    private Boolean monitor = true;
    InputStream input = null;
    BufferedReader reader = null;

    public ServerThread(Socket socket) {
        this.socket = socket;
    }


    @Override
    public void run() {

            try {
                /**
                 * 不断轮询接收发送过来的消息
                 * 信息的格式:固定编号,信息体
                 * */
                System.out.println("监听客户端 - " + socket.getRemoteSocketAddress() + " -> 机连接成功");
                while (monitor) {
//                     设置连接超时9秒
                    socket.setSoTimeout(9000);

                    input = socket.getInputStream();
                    reader = new BufferedReader(new InputStreamReader(input));



                    String s = null;
                    while ((s = reader.readLine()) != null){
                        System.out.println(s);
                    }
                }
            } catch (IOException e) {
                System.out.println("监听客户端 - " + socket.getRemoteSocketAddress() + " -> 关闭");
//                e.printStackTrace();
            } finally {
                try {
                    socket.close();
                    input.close();
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
    }
}

2、通过Navicat Premium 编写Socket客户端(连接Oracke11g)

ClientInsert.java
import java.io.PrintWriter;
import java.net.Socket;

public class ClientInsert {
    public static String send(String id) {
        try {
            Socket socket = new Socket("47.92.71.134", 60000);
            PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
            pw.println("测试ID:"+id);
        } catch (Exception e) {
            e.printStackTrace();
            return "defeat:" + e.getMessage();
        }
        return "ok";
    }

    public static void main(String[] args) {
        send("s");
    }
}

2.1 【其他】→【java】→【新建java】(保存后,右键JavaSource→【维护】→【编译或解析】【没有红色标记即可】)

3、创建存储过程(【函数】→【新建函数】。保存后,右键过程→【维护】→【编译】【没有红色标记即可】)

CREATE OR REPLACE PROCEDURE socketRequest(newId IN varchar2)
as language java name  
'ClientInsert.send(java.lang.String)';

?4、右键表名→【设计表】→【选择触发器】

BEGIN
 socketRequest(:new."id"); END;

保存后,【其他】→【触发器】(查看没有红色标记即可)

5、添加权限(ctrl+R→cmd→输入sqlplus username/password)

 sql>exec dbms_java.grant_permission( 'username', 'SYS:java.net.SocketPermission', 'oracle地址:1521', 'listen,resolve' );

 sql>commit;

 sql>exec dbms_java.grant_permission( 'username', 'SYS:java.net.SocketPermission', 'socket服务端地址:端口号', 'connect,resolve' );

 sql>commit;

?

?6、运行Socket服务端,操作表进行测试

?

?

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:37:29  更:2021-12-02 16:39:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:33:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码