汉得PI&PO教材-Adapter使用-实例5 jdbc2jdbc(含存错过程)V1.0
汉得PI&PO教材系列 |
|
|
Adapter使用-实例5 jdbc2jdbc(含存错过程) |
仅限汉得内部使用 |
作者:汉得顾问 版本:1.0 日期:2017-02-01 |
图标
图标 |
含义 |
警告 |
|
示例 |
|
注释 |
|
建议 |
|
语法 |
|
外部处理 |
|
可选业务处理或决定 |
排版惯例
字体风格 |
描述 |
Example text |
出现在屏幕上的单字或字符。包括字段名、屏幕标题、按钮以及菜单名、路径和选项。 到其它文档的交叉引用。 |
Example text |
正文文本中强调的字或词组,图形和表格的标题。 |
EXAMPLE TEXT |
系统中元素的名称。包括报表名、程序名、事务代码、表名和正文文本中嵌入的编程语言关键字,如 SELECT 和 INCLUDE。 |
Example text |
屏幕输出。包括文件和目录的名称及其路径、消息、源代码、变量和参数的名称以及安装工具、更新工具和数据库工具的名称。 |
EXAMPLE TEXT |
键盘上的按键。例如,功能键(如F2)或ENTER键。 |
Example text |
用户输入原文。完全如文档所示输入这些单字或字符至系统中。 |
<Example text> |
可变用户输入。尖括号表示应使用适当的输入替换括号中的单字和字符。 |
目录
1、文档说明... 4
2、文档历史... 4
3、功能说明... 5
4、操作步骤-定义IR对象... 6
2.1 创建Data Type. 6
2.2 创建Message Type. 7
2.3 创建Service Interface. 8
2.4 创建Message Mapping(异步模式下只有一个)... 10
2.5 创建Operation Mapping. 11
5、操作步骤-定义ID对象... 12
5.1 创建发送方Communication Channel 12
5.2 创建接收方Communication Channel 13
5.3 创建Integrated Configuration. 15
6、对用于调用存储过程... 18
7、关于JDBC接口的最佳方案实践... 21
7.1 JDBC作为发送方的最佳实践... 21
7.2 JDBC作为接收方... 21
7.3案例... 21
1、文档说明
本文档目的在于提供一个jdbc2jdbc场景的接口案例,用于说明jdbc适配器如何使用,以及使用JDBC适配器的注意事项以及最佳使用实践。
使用本案例指导已经具有操作基础的人使用“浏览器+Jar工具(另一个工具是NWDS)”实现文件接口。
2、文档历史
版本 |
修订时间 |
修订人 |
备注 |
0.1 |
2016年11月1日 |
张宇 |
根据培训案例整理出该文档 |
1.0 |
2017年02月1日 |
雷小平 |
审核以及修订文档内容,增加说明 |
|
|
|
|
|
|
|
|
3、功能说明
JDBC适配器用于PO与各类数据库交互,前提是要安装对应数据库的驱动。PO访问数据库可以读写,可以通过简单或复杂的SQL,也可以通过Procedure完成对数据库的读写。适配器支持同步和异步两种方式。JDBC适配器作为发送方,只能异步方式,作为接收方可以同步和异步。
本案例通过描述JDBC2JDBC的异步实现步骤。场景详细描述为:
将数据库表ZPOTEST_FROM的数据(如下第一幅图)通过该接口同步数据到目标数据库的ZPOTEST_TO表(如下第二幅图)。
源数据库及其表ZPOTEST_FROM(表数据和表结构)
目标数据表ZPOTEST_TO(表数据和表结构)
本案例发送方和接收方均用DEMO对应的BS。
4、操作步骤-定义IR对象
IR所需组件:
2.1 创建Data Type
创建发送方DT(平面结构)
创建接收方DT,注意格式(access下挂字段,key下指定主键)
2.2 创建Message Type
创建发送方MT,关联发送方DT
创建接收方MT,关联接收方DT
2.3 创建Service Interface
创建发送方SI,异步模式,关联发送方MT
创建接收方SI ,异步模式,关联接收方MT
2.4 创建Message Mapping(异步模式下只有一个)
从发送方MT到接收方MT,连接对应关系
2.5 创建Operation Mapping
从发送方SI到接收方SI,输入MM
5、操作步骤-定义ID对象
ID所需组件:
5.1 创建发送方Communication Channel
创建发送方CC,输入发送方BS,输入发送方数据库连接信息
JDBC Driver:oracle.jdbc.driver.OracleDriver(固定)
Connection:jdbc:oracle:thin:@ip:port:DBname
输入数据库SQL语句,并输入MT(取数字段与DT字段对应)
从数据库取数
SELECT CID,FIRSTNAME,SECONDNAME,TELNUM,EMAIL,READ_FLAG FROM ZPOTEST_FROM WHERE READ_FLAG IS NULL
取数语句,取数的字段跟DT定义的字段顺序和字段名一样。
这里设计了一个字段,用于标记数据已经读取过了,更新数据库语句:
UPDATE ZPOTEST_FROM SET READ_FLAG = 'X' WHERE READ_FLAG IS NULL
5.2 创建接收方Communication Channel
创建接收方CC,输入接收方BS,输入接收方数据库连接信息
JDBC Driver:oracle.jdbc.driver.OracleDriver(固定)
Connection:jdbc:oracle:thin:@ip:port:DBname
5.3 创建Integrated Configuration
输入发送方BS、SI,选择发送方CC
输入接收方BS
输入接收方SI
输入接收方CC
6、对用于调用存储过程
DT定义如下截图,每个字段需要定义三个属性
Input:定义为存储过程的输入参数,可以输入1或者0
Output:定义为存储过程的输出参数。可以输入1或者0,Input和Output只能一个有值
Type:为数据类型
具体请参考:
Mapping时默认input
请注意:这里每个字段必须有值,如果发送方数据为空,一般情况下不会产生接收方的数据元素节点,因此需要做判断,如果为空,接收方的必须为空值,不能没有节点:需要用exist判断存在性,如果不存在,给空值。
如果存储过程有输入和输出参数,则在SI中指定为同步。
7、关于JDBC接口的最佳方案实践
一般情况下不建议使用JDBC接口,而是使用应用层的API接口。但是在特定情况下,无法避免。因此有必要探索JDBC接口的最佳实践。本方案希望是最佳的实践。
7.1 JDBC作为发送方的最佳实践
不建议直接作为发送方使用,通过下面的方法变成JDBC作为接收方使用。
在需要JDBC作为发送方的情况是需要到数据库直接取数通过接口传输到其他系统。一般情况下是该系统在技术上或者管理上无法提供应用层的接口。直接使用JDBC作为发送方需要安排定期作业,且安排作业的时间是由激活时间决定,操作不方便(有待研究可以定期发布)。该场景下,建议从数据接收方发起定期或实时接口调用(接口技术不限),调用PO的JDBC适配器(作为接收方,使用SELECT方法),到目标数据库取数返回到调用方,即同步的JDBC接收方。
注:该方案适合需要JDBC向数据库直接取数
7.2 JDBC作为接收方
该场景需要将数据推送到目标数据库,可直接使用JDBC适配器(接收方,使用UPDATE_INSERT或EXECUTE方法)。本方案建议不直接写目标系统的业务数据库,而是在目标数据库新建独立SCHMAL作为中间数据库,然后再通过存储过程将数据根据业务逻辑转移到业务数据库。在JDBC接收方依次调用UPDATE_INSERT和EXECUTE方法,UPDATE_INSERT用于更新中间数据库数据,EXECUTE用于执行存储过程(无参数)将中间数据库转移到业务数据库。该方案优点是:
一是不直接访问对方的业务数据库,建立松耦合接口,且避免共同操作同一业务数据库;
二是不用配置复杂的存储过程,而使用不带参数的存储过程,避免复杂的Message Mapping。具体如例子在上述实例的基础上做一些变动实现。该方案接收方同步异步均可。
7.3案例
执行前的数据表(源表):
执行前的数据表(目标中间表):
执行前的数据表(目标最终表):
修改上述实例的接收方结构,增加一个执行存储过程(参数为空)的语句:
更新MM配置:
说明:
第一个语句的action为“UPDATE_INSERT”,table为“ZPOTEST_TO”;第二个语句的action为“EXECUTE”,table为“kitty4”。
Kitty4存储过程如下:
执行接口调用后的结果:
源表,数据去过后更新的读取标识;
中间表,写入数据库成功。
存储过程执行成功后,将中间表数据转入了目标表,同时更新了中间表的读取标识,设置为已读取。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本