JBPortal数据同步

利用JBPortal做数据同步时,需要保证双方数据库表名(可不一致)、字段名、字段长度、字段类型一致,并且数据接收方不能有Nvarchar、Nvarchar2类型。

客户端代码示例:

HttpPortalClient client = new  HttpPortalClient();
String service = "XXX"; // service 是交易号
String url = PORTAL_URL + "/CALL-"  + service; //   PORTAL_URL是portal的地址
AppRequest req = new AppRequest();
req.setHeader("TranCode", service)

// 需要在 portal_config.xml 中配置 <channel credential="000000" bankid="00101" operid="00101A01" password="000000">p2p_web</channel>
req.setHeader("channel", "p2p_web"); 
req.setHeader("credential", "000000");

SingleResult sr_cmuser =  //  cmuser表中的一条记录
String tableName = "cmuser";
for(Object k : sr_cmuser.keySet()) {
  String s = (String) k; // 字段名
  String v = sr_cmuser.getString(s); // 字段值
  req.setField(tableName + "." + s, v); // 表名.字段名 -> 字段值
}

// 同样的,把其他表的字段放入 req

AppResponse resp = client.invokeService(url, req, null);

// 检查是否 ServiceError
if (resp instanceof ServiceError) {
  ServiceError e = (ServiceError) resp;
  String code = e.getCode();
  String messsage = e.getMessage();
}

服务端代码示例:

Map records = new HashMap(); // 所有的记录,key 是 表名, value 是一个map(字段名 -> 字段值)

for(Map.Entry entry : request.entrySet()) {
  String k = (String) entry.getKey();
  String v = (String) entry.getValue();
  String i = k.indexOf(".");
  if (i > 0) {
    String tableName = k.substring(0, i);
    String fieldName = k.substring(i);
    UnikMap m = (UnikMap) records.get(tableName);
   if (m == null) {
     m = new UnikMap();
     records.put(tableName, m);
   }
   m.put(fieldName, v);
  }
}

// 遍历record,写入数据库

进阶同步方法

客户端代码示例
SingleResult sr = querySingle(getTpl(tplName), uMap);
if (sr != null) {
    for (Object k : sr.keySet()) {
        String s = (String) k; // 字段名
        String v = sr.getString(s); // 字段值
        req.setField(tableName + "." + s, v); // 表名.字段名 -> 字段值      
    }
}

服务端代码示例
UnikMap uMap = new UnikMap();
        String loanid = request.getField("loanid");
        uMap.put("loanid", loanid);
        uMap.put("tableName", "dbAppbillBook");
        executeProcedure(getTpl("delTabById"), uMap);

        Map records = new HashMap(); // 所有的记录,key 是 表名, value 是一个map(字段名 -> 字段值)
        for(Object obj : request.entrySet()) {
          Map.Entry entry= (Map.Entry)obj;
          String k = (String) entry.getKey();
          String v = (String) entry.getValue();
          int i = k.indexOf(".");
          int j = k.lastIndexOf(".");
          if (i > 0 && j > 0) {
            String tableName = k.substring(0, i);
            String rowNo = k.substring(i+1, j);
            String fieldName = k.substring(j+1);
            UnikMap rows = (UnikMap) records.get(tableName);
            if (rows == null) {
              rows = new UnikMap();
              records.put(tableName, rows);
            }
            UnikMap row = (UnikMap) rows.get(rowNo);
            if (row == null) {
                row = new UnikMap();
                rows.put(rowNo, row);
            }
           row.put(fieldName, v);
          }
        }

        // 遍历record,写入数据库
        for (Object obj : records.keySet()) {           
            UnikMap rows = (UnikMap) records.get(obj);
            int count = rows.size();
            for(int i = 0; i < count; i++) {
                UnikMap row = (UnikMap) rows.get(String.valueOf(i));
                performAction(INSERT, obj.toString(), row);
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值