千家信息网

datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,今天就跟大家聊聊有关datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了
千家信息网最后更新 2024年11月11日datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%

今天就跟大家聊聊有关datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

问题:

select * from dbo.SKJJGWFGXX where (i_time >= '1980-01-01:00:00' and i_time < '2020-12-15:25:40') 具体错误信息为:com.microsoft.sqlserver.jdbc.SQLServerException: 从字符串转换日期和/或时间时,转换失败。

时间字符串中带%,mysql数据库能识别并正确执行,而sqlserver数据库(2008)不能识别,造成查询失败。

如果此问题不解决,那么从sqlserver到mysql的数据同步中,无法采用时间增量方式进行数据实时同步。

在java中和python中都尝试把"%"换成空格,最后的结果都是无法运行。估计是在命令行中做为参数传入时,空格本身是特殊符号,用于分开命令和参数的,强行替换,最后导致时间字符串被分成两段接收。

解决方案:

修改ExecutorJobHandler,生成job临时文件时,把临时文件中的变量用具体值进行替换。

定义了一个新的处理方法:replaceJobJsonParams

// zhuangxl 2020.12.15 替换开始

String jobJson = new String(trigger.getJobJson());

jobJson = replaceJobJsonParams(jobJson, trigger);

tmpFilePath = generateTemJsonFile(jobJson);

// zhuangxl 2020.12.15 替换结束

/**

* 替换job文件参数

* @author zhuangxl

* @param jobJson

* @return

*/

private String replaceJobJsonParams(String jobJson, TriggerParam trigger) {

if (IncrementTypeEnum.TIME.getCode() == trigger.getIncrementType()) {

String replaceParamType = trigger.getReplaceParamType();

//类别:时间自增,只操作指定了具体的时间格式的类型

if (StringUtils.isNotBlank(replaceParamType) && !replaceParamType.equals("Timestamp")) {

//格式化时间字符串

SimpleDateFormat sdf = new SimpleDateFormat(replaceParamType);

String endTime_ = sdf.format(trigger.getTriggerTime());

String startTime_ = sdf.format(trigger.getStartTime());

//识别要替换的时间变量名称

String[] replaceParams = trigger.getReplaceParam().split(" ");

String startTimeStr = replaceParams[0].substring(replaceParams[0].indexOf("D")+1, replaceParams[0].indexOf("="));

String endTimeStr = replaceParams[1].substring(replaceParams[1].indexOf("D")+1, replaceParams[1].indexOf("="));

//执行变量替换

jobJson = jobJson.replace("${"+startTimeStr+"}", "'"+startTime_+"'");

jobJson = jobJson.replace("${"+endTimeStr+"}", "'"+endTime_+"'");

}

}

return jobJson;

}

看完上述内容,你们对datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0