diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java index eb82aa44..5bfc699f 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java @@ -1,7 +1,9 @@ package com.alibaba.datax.plugin.rdbms.util; import com.alibaba.datax.common.exception.DataXException; +import org.apache.commons.lang3.StringUtils; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -160,6 +162,17 @@ public enum DataBaseType { return result; } + public String buildQuoteColumnFormat(List columnName) { + if (null == columnName || columnName.isEmpty()) { + return StringUtils.EMPTY; + } + StringBuilder builder = new StringBuilder(); + for (String column : columnName) { + builder.append(quoteColumnName(column)).append(","); + } + return builder.substring(0, builder.length() - 1); + } + public String quoteTableName(String tableName) { String result = tableName; diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java index 440aac2a..bbdae48c 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/CommonRdbmsWriter.java @@ -263,8 +263,9 @@ public class CommonRdbmsWriter { this.taskPluginCollector = taskPluginCollector; // 用于写入数据的时候的类型根据目的表字段类型转换 + String quoteColumnFormat = this.dataBaseType.buildQuoteColumnFormat(this.columns); this.resultSetMetaData = DBUtil.getColumnMetaData(connection, - this.table, StringUtils.join(this.columns, ",")); + this.table, quoteColumnFormat); // 写数据库的SQL语句 calcWriteRecordSql(); diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java index 5f5f0d51..b2539b75 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/writer/util/WriterUtil.java @@ -118,6 +118,8 @@ public final class WriterUtil { String.format("您所配置的 writeMode:%s 错误. 因为DataX 目前仅支持replace,update 或 insert 方式. 请检查您的配置并作出修改.", writeMode)); } // && writeMode.trim().toLowerCase().startsWith("replace") + String quoteColumnFormat = dataBaseType.buildQuoteColumnFormat(columnHolders); + String writeDataSqlTemplate; if (forceUseUpdate || ((dataBaseType == DataBaseType.MySql || dataBaseType == DataBaseType.Tddl) && writeMode.trim().toLowerCase().startsWith("update")) @@ -125,7 +127,7 @@ public final class WriterUtil { //update只在mysql下使用 writeDataSqlTemplate = new StringBuilder() - .append("INSERT INTO %s (").append(StringUtils.join(columnHolders, ",")) + .append("INSERT INTO %s (").append(quoteColumnFormat) .append(") VALUES(").append(StringUtils.join(valueHolders, ",")) .append(")") .append(onDuplicateKeyUpdateString(columnHolders)) @@ -137,7 +139,7 @@ public final class WriterUtil { writeMode = "replace"; } writeDataSqlTemplate = new StringBuilder().append(writeMode) - .append(" INTO %s (").append(StringUtils.join(columnHolders, ",")) + .append(" INTO %s (").append(quoteColumnFormat) .append(") VALUES(").append(StringUtils.join(valueHolders, ",")) .append(")").toString(); }