mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
@@ -26,11 +26,6 @@
|
|||||||
<artifactId>druid</artifactId>
|
<artifactId>druid</artifactId>
|
||||||
<version>1.1.9</version>
|
<version>1.1.9</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>mysql</groupId>
|
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
|
||||||
<version>5.1.40</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -117,4 +117,23 @@ public class Util {
|
|||||||
|
|
||||||
return file;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,11 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- jdbc -->
|
<!-- jdbc -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>5.1.40</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.postgresql</groupId>
|
<groupId>org.postgresql</groupId>
|
||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
|
|||||||
@@ -25,6 +25,12 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>5.1.40</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.postgresql</groupId>
|
<groupId>org.postgresql</groupId>
|
||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
|
|||||||
@@ -78,6 +78,9 @@ public class RdbSyncService {
|
|||||||
Map<String, MappingConfig> configMap = mappingConfigCache
|
Map<String, MappingConfig> configMap = mappingConfigCache
|
||||||
.get(destination + "." + database + "." + table);
|
.get(destination + "." + database + "." + table);
|
||||||
|
|
||||||
|
if (configMap == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (MappingConfig config : configMap.values()) {
|
for (MappingConfig config : configMap.values()) {
|
||||||
|
|
||||||
if (config.getConcurrent()) {
|
if (config.getConcurrent()) {
|
||||||
@@ -177,13 +180,13 @@ public class RdbSyncService {
|
|||||||
|
|
||||||
List<Map<String, ?>> values = new ArrayList<>();
|
List<Map<String, ?>> values = new ArrayList<>();
|
||||||
for (Map.Entry<String, String> entry : columnsMap.entrySet()) {
|
for (Map.Entry<String, String> entry : columnsMap.entrySet()) {
|
||||||
String targetClolumnName = entry.getKey();
|
String targetColumnName = entry.getKey();
|
||||||
String srcColumnName = entry.getValue();
|
String srcColumnName = entry.getValue();
|
||||||
if (srcColumnName == null) {
|
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);
|
Object value = data.get(srcColumnName);
|
||||||
|
|
||||||
@@ -238,7 +241,7 @@ public class RdbSyncService {
|
|||||||
|
|
||||||
for (String targetColumnName : targetColumnNames) {
|
for (String targetColumnName : targetColumnNames) {
|
||||||
updateSql.append(targetColumnName).append("=?, ");
|
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));
|
BatchExecutor.setValue(values, type, data.get(srcColumnName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -344,10 +347,10 @@ public class RdbSyncService {
|
|||||||
String targetColumnName = entry.getKey();
|
String targetColumnName = entry.getKey();
|
||||||
String srcColumnName = entry.getValue();
|
String srcColumnName = entry.getValue();
|
||||||
if (srcColumnName == null) {
|
if (srcColumnName == null) {
|
||||||
srcColumnName = targetColumnName;
|
srcColumnName = Util.cleanColumn(targetColumnName);
|
||||||
}
|
}
|
||||||
sql.append(targetColumnName).append("=? AND ");
|
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)) {
|
if (o != null && o.containsKey(srcColumnName)) {
|
||||||
BatchExecutor.setValue(values, type, o.get(srcColumnName));
|
BatchExecutor.setValue(values, type, o.get(srcColumnName));
|
||||||
@@ -384,7 +387,7 @@ public class RdbSyncService {
|
|||||||
String targetColumnName = entry.getKey();
|
String targetColumnName = entry.getKey();
|
||||||
String srcColumnName = entry.getValue();
|
String srcColumnName = entry.getValue();
|
||||||
if (srcColumnName == null) {
|
if (srcColumnName == null) {
|
||||||
srcColumnName = targetColumnName;
|
srcColumnName = Util.cleanColumn(targetColumnName);
|
||||||
}
|
}
|
||||||
Object value;
|
Object value;
|
||||||
if (o != null && o.containsKey(srcColumnName)) {
|
if (o != null && o.containsKey(srcColumnName)) {
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ public class SyncUtil {
|
|||||||
case Types.LONGVARCHAR:
|
case Types.LONGVARCHAR:
|
||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
pstmt.setString(i, (String) value);
|
pstmt.setString(i, (String) value);
|
||||||
|
} else if (value == null) {
|
||||||
|
pstmt.setNull(i, type);
|
||||||
} else {
|
} else {
|
||||||
pstmt.setString(i, value.toString());
|
pstmt.setString(i, value.toString());
|
||||||
}
|
}
|
||||||
@@ -140,8 +142,10 @@ public class SyncUtil {
|
|||||||
pstmt.setBigDecimal(i, new BigDecimal((float) value));
|
pstmt.setBigDecimal(i, new BigDecimal((float) value));
|
||||||
} else if (value instanceof Double) {
|
} else if (value instanceof Double) {
|
||||||
pstmt.setBigDecimal(i, new BigDecimal((double) value));
|
pstmt.setBigDecimal(i, new BigDecimal((double) value));
|
||||||
} else {
|
} else if (value != null) {
|
||||||
pstmt.setBigDecimal(i, new BigDecimal(value.toString()));
|
pstmt.setBigDecimal(i, new BigDecimal(value.toString()));
|
||||||
|
} else {
|
||||||
|
pstmt.setNull(i, type);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Types.REAL:
|
case Types.REAL:
|
||||||
|
|||||||
Reference in New Issue
Block a user