rdb 关键字转译符过滤

This commit is contained in:
mcy
2018-11-29 15:39:08 +08:00
parent cf5e42442b
commit 65f2695963
3 changed files with 34 additions and 8 deletions

View File

@@ -117,4 +117,23 @@ public class Util {
return file;
}
public static String cleanColumn(String column) {
if (column == null) {
return null;
}
if (column.contains("`")) {
column = column.replaceAll("`", "");
}
if (column.contains("'")) {
column = column.replaceAll("'", "");
}
if (column.contains("\"")) {
column = column.replaceAll("\"", "");
}
return column;
}
}

View File

@@ -78,6 +78,9 @@ public class RdbSyncService {
Map<String, MappingConfig> configMap = mappingConfigCache
.get(destination + "." + database + "." + table);
if (configMap == null) {
continue;
}
for (MappingConfig config : configMap.values()) {
if (config.getConcurrent()) {
@@ -177,13 +180,13 @@ public class RdbSyncService {
List<Map<String, ?>> values = new ArrayList<>();
for (Map.Entry<String, String> entry : columnsMap.entrySet()) {
String targetClolumnName = entry.getKey();
String targetColumnName = entry.getKey();
String srcColumnName = entry.getValue();
if (srcColumnName == null) {
srcColumnName = targetClolumnName;
srcColumnName = Util.cleanColumn(targetColumnName);
}
Integer type = ctype.get(targetClolumnName.toLowerCase());
Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
Object value = data.get(srcColumnName);
@@ -238,7 +241,7 @@ public class RdbSyncService {
for (String targetColumnName : targetColumnNames) {
updateSql.append(targetColumnName).append("=?, ");
Integer type = ctype.get(targetColumnName.toLowerCase());
Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
BatchExecutor.setValue(values, type, data.get(srcColumnName));
}
}
@@ -344,10 +347,10 @@ public class RdbSyncService {
String targetColumnName = entry.getKey();
String srcColumnName = entry.getValue();
if (srcColumnName == null) {
srcColumnName = targetColumnName;
srcColumnName = Util.cleanColumn(targetColumnName);
}
sql.append(targetColumnName).append("=? AND ");
Integer type = ctype.get(targetColumnName.toLowerCase());
Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
// 如果有修改主键的情况
if (o != null && o.containsKey(srcColumnName)) {
BatchExecutor.setValue(values, type, o.get(srcColumnName));
@@ -384,7 +387,7 @@ public class RdbSyncService {
String targetColumnName = entry.getKey();
String srcColumnName = entry.getValue();
if (srcColumnName == null) {
srcColumnName = targetColumnName;
srcColumnName = Util.cleanColumn(targetColumnName);
}
Object value;
if (o != null && o.containsKey(srcColumnName)) {

View File

@@ -74,6 +74,8 @@ public class SyncUtil {
case Types.LONGVARCHAR:
if (value instanceof String) {
pstmt.setString(i, (String) value);
} else if (value == null) {
pstmt.setNull(i, type);
} else {
pstmt.setString(i, value.toString());
}
@@ -140,8 +142,10 @@ public class SyncUtil {
pstmt.setBigDecimal(i, new BigDecimal((float) value));
} else if (value instanceof Double) {
pstmt.setBigDecimal(i, new BigDecimal((double) value));
} else {
} else if (value != null) {
pstmt.setBigDecimal(i, new BigDecimal(value.toString()));
} else {
pstmt.setNull(i, type);
}
break;
case Types.REAL: