package com.metasoft.framework.si.eai.db;
import java.util.HashSet;
import java.util.Iterator;
import com.metasoft.framework.si.eai.parse.FieldMapping;
import com.metasoft.framework.si.eai.parse.TableMapping;
import com.metasoft.framework.si.eai.parse.TableMappingHelper;
/**
*
* @author zr.peng
* @deprecated
* @since 2008-4-14
*/
public class MetaDataToU8Helper {
/**
* 把metasql中的SQL替换成U8系统中的SQl
* @param sql
* Meta中的处理SQL 语句
* @param map
* 表间映射关系对象
* @return
*/
public static String transformMetaSqlToU8Sql(String sql, TableMapping map) {
String sqlTrans;
sqlTrans = replace(sql, map.getFrom_table(), map.getTo_table());
HashSet fieldMappings = map.getFieldMapping();
Iterator it = fieldMappings.iterator();
while (it.hasNext()) {
FieldMapping fieldMapping = (FieldMapping) it.next();
String from_field = fieldMapping.getFrom_field();
String to_field = fieldMapping.getTo_field();
sqlTrans = replace(sqlTrans, from_field, to_field);
}
return sqlTrans;
}
/**
* 替换
* @param sql 要处理的字符串
* @param from_field 被替换的字符
* @param to_field 替换的字符
* @return
*/
private static String replace(String sql, String from_field, String to_field) {
String sqlTrans = sql;
int sqlLen = sqlTrans.length();
int from_fieldLen = from_field.length();
int top = sqlLen - from_fieldLen;
for (int i = 0; i < top;) {
/*if (sqlTrans.substring(i, i + 6).equalsIgnoreCase("values")) {
break;
}*/
String temp = sqlTrans.substring(i, from_fieldLen + i);
if (temp.equals(from_field)) {
if (leftAndRightAllOK(sqlTrans, temp,i)) {
String left = sqlTrans.substring(0, i);
String right = sqlTrans.substring(i + from_fieldLen);
sqlTrans = left.concat(to_field).concat(right);
top = sqlTrans.length() - from_fieldLen;
i = i + to_field.length();
} else {
i++;
}
} else {
i++;
}
}
return sqlTrans;
}
/**
* 判断指定sql字符串 中subStr 子串前后是否是合适的字符,用以判断他是否是一个独立的串
* @param sql
* @param subStr
* @param subFirstIndex
* 子串subStr第一个字符在 字串串sql中的位置
* @return
*/
private static boolean leftAndRightAllOK(String sql, String subStr,int subFirstIndex) {
boolean leftAndRightOK = false;
char leftChar = sql.charAt(subFirstIndex-1);
String left = Character.toString(leftChar);
char rightChar = sql.charAt(subFirstIndex+subStr.length());
String right = Character.toString(rightChar);
if (left.matches("[^a-zA-Z]") && right.matches("[^a-zA-Z]")) {
leftAndRightOK = true;
}
return leftAndRightOK;
}
//单元测试
public static void main(String[] args) {
TableMapping map = (TableMapping) TableMappingHelper.getTablMapping(
"purchaseorder_SO_SOMain",
"src/com/metasoft/framework/si/eai/t2txml/purchaseorderdetail_SO_SODetails_table.xml",
"src/com/metasoft/framework/si/eai/t2txml/purchaseorderdetail_SO_SODetails_field.xml");
String insrtSql = "insert into purchaseorder (id,created,sname,updatedby," +
"emaudit,updated,jfgl,scode,iddep,createdby,idowner,ckzh) " +
"values('402880d8193bfb4a01193bfeef400328','2008-04-11 13:39:52.734','bbbbbbbb'," +
"'402881e618ffd8d80119006f110d1983','402880900bb2d155010bb2fcd9ec04ec'," +
"'2008-04-11 13:39:52.734','402881d8192d101201192d6fba267dcc','bb'," +
"'402881e618ffd8d80119002f148b0ae5','402881e618ffd8d80119006f110d1983'," +
"'402881e618ffd8d80119006f110d1983','402881d8192dbda401192e3f1b814403');";
String sqlTrans = MetaDataToU8Helper.transformMetaSqlToU8Sql(insrtSql, map);
System.out.println(insrtSql);
System.out.println(sqlTrans);
String selctSql="select purchaseorder.id purchaseorder_id , " +
" purchaseorder.scode purchaseorder_scode, " +
" purchaseorder.sname purchaseorder_sname, " +
" purchaseorder.chmc purchaseorder_chmc, " +
" purchaseorder.idowner purchaseorder_idowner," +
" idowner_ref.sname purchaseorder_idowner_ref, " +
" purchaseorder.dbtotalmoney purchaseorder_dbtotalmoney, " +
" purchaseorder.insurance purchaseorder_insurance, " +
" purchaseorder.total purchaseorder_total, " +
" purchaseorder.zjf purchaseorder_zjf, purchaseorder.iddep " +
" purchaseorder_iddep, iddep_ref.sname purchaseorder_iddep_ref" +
" from purchaseorder purchaseorder ";
String sqlTrans2 = MetaDataToU8Helper.transformMetaSqlToU8Sql(selctSql, map);
System.out.println(selctSql);
System.out.println(sqlTrans2);
}
}
分享到:
相关推荐
文件替换 独立模块替换文件中的字符串安装 $ npm install --save-dev file-str-replace用法 var fileStr = require ( 'file-str-replace' ) ;fileStr . replace ( 'example.txt' , / [ 0-9 ] / g , '<3' , ...
envify, 有选择地用普通字符串替换 node 样式 环境变量 envify 有选择地用普通字符串替换节点样式 环境变量 。 可以作为独立的CLI工具和 Browserify v2转换。uglifyify 配合工作最佳。安装如果将 MODULE 与...
技巧6替换单元格内字符串24 技巧7复制单元格区域25 技巧8仅复制数值到另一区域28 8-1使用选择性粘贴28 8-2直接赋值的方法29 技巧9单元格自动进入编辑状态30 技巧10禁用单元格拖放功能30 技巧11单元格格式操作31 11-1...
独立开发,实测可用, 将阿拉伯和中文数字组合的字符串转成阿拉伯数字的整型 包。例如: “八万三千20”就可以转成整型 803020 。解压后,引用包。调用方法 在UnitTest.java 中有
varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...
批量更名终结者20.22单文件版...支持替换更名(将文件名中的指定字符串替换为新字符串,可区分大小写,可指定替换次数) 支持删除更名(复合型,能根据文件名中某字符串或特定位置删除其两边字符串或将两边字符串调换,可
utf8代码转换器 转码JavaScript字符串<... 补丁程序涵盖了替换字符,错误等内容。 板凳 在Chromebook上,使用node@14.6.0: $ npm run bench > utf8-transcoder@2.0.1 bench utf8-transcoder > node
每个虚拟控制台可以看作是一个独立的工作站,工作台之间可以切换。虚拟控制台的切换可以通过按下Alt键和一个功能键来实现,通常使用F1-F6 。 例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的...
小型独立功能,用于在URL上设置查询字符串,替换现有查询并将哈希保留在原处。 例子 var setQuery = require ( 'url-set-query' ) setQuery ( 'http://foo.com/index.html?state=open' , 'beep=true' ) //=> '...
实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式 147 实例116 验证电话号码的格式是否正确 147 实例117 验证Email地址格式是否正确 148 实例118 验证IP地址是否有效 149 实例119 统计关键字的查询结果 150...
当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配 的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式 / [a-z] + \ d+/.但是...
替换字符串某一部分 信息采集,用来分析有效代码段 … 有规律的字符串描述 正则表达式是一门独立的知识,同样的一段描述,比如,对于email的匹配表达式,在不同的语言是一样的,但是调用的函数不同。 正则表达式–...
trim,ltrim,alltrim 取字串:left,right,substr 计算字串出现次数:occurs 取字串位置:at,atc 子串替换:stuff 字符替换:chartran 字符串匹配:like 日期时间函数: 系统时间:date,time,datetime 取年份、月份和天数...
符号包裹 v1.6.exe 符号包裹字符串列表处理工具 添加、替换、加减序号 符号包裹 v1.6.exe 符号包裹字符串列表处理工具 添加、替换、加减序号
数据结构的课程设计 c语言做的 字符查找功能 很简单的 有一定的参考 做得不是很好
实例39 替换字符串 实例40 比较字符串 第三篇 文件操作 实例41 文字处理 实例42 创建删除文件夹 实例43 移动文件 实例44 判断文件存在与否 实例45 加密解密文件 第四篇 图形图像处理 实例46 使用画笔(1) ...
,可让您测试正则表达式,查看正则表达式从给定字符串中捕获的内容,并在字符串上顺序应用多个查找/替换模式,使您可以使用正则表达式和编程逻辑执行复杂,可重复的文本转换。这是通过创建自定义动作来实现的(动作...
你写了一个Python 3程序...例如,你可以把你程序中的每个字符串替换为一个函数调用(函数名简单些,比如像_()一样),这会返回被翻译为该正确语言的字符串。举个例子,如果你的程序原本是: print('Hello world!')
扩展${var/repalce/by_string} 用例,例如替换字符串 for n in $(ls prefix1_*); do mv $n ${n/prefix1_/prefix2_} done 常见的困惑 $()用于命令${}用于变量"${}"是冗长的,但默认情况下${}是字符串插值 x=world ...
matlab代码替换xlwrite Matlab的xlswrite函数的独立于平台的替代方案 问题 Matlab的xlswrite仅在安装了Excel的Windows平台上写入xls和xlsx文件。 这是因为它使用的COM对象仅在Windows上受支持。 解决方案 xlwrite是...