fix_ETL同步mysql关键字报错 (#4346)

Co-authored-by: foleyang <foleyang@cogobuy.com>
This commit is contained in:
杰锅不是锅
2022-11-16 10:24:56 +08:00
committed by GitHub
parent 272b1d5d11
commit 279d503cf4
2 changed files with 7 additions and 2 deletions

View File

@@ -58,6 +58,7 @@ public class RdbEtlService extends AbstractEtlService {
Map<String, String> columnsMap = new LinkedHashMap<>(); Map<String, String> columnsMap = new LinkedHashMap<>();
Map<String, Integer> columnType = new LinkedHashMap<>(); Map<String, Integer> columnType = new LinkedHashMap<>();
DruidDataSource dataSource = (DruidDataSource) srcDS; DruidDataSource dataSource = (DruidDataSource) srcDS;
String backtick = SyncUtil.getBacktickByDbType(dataSource.getDbType());
Util.sqlRS(targetDS, Util.sqlRS(targetDS,
"SELECT * FROM " + SyncUtil.getDbTableName(dbMapping, dataSource.getDbType()) + " LIMIT 1 ", "SELECT * FROM " + SyncUtil.getDbTableName(dbMapping, dataSource.getDbType()) + " LIMIT 1 ",
@@ -90,8 +91,10 @@ public class RdbEtlService extends AbstractEtlService {
insertSql.append("INSERT INTO ") insertSql.append("INSERT INTO ")
.append(SyncUtil.getDbTableName(dbMapping, dataSource.getDbType())) .append(SyncUtil.getDbTableName(dbMapping, dataSource.getDbType()))
.append(" ("); .append(" (");
columnsMap columnsMap.forEach((targetColumnName, srcColumnName) -> insertSql.append(backtick)
.forEach((targetColumnName, srcColumnName) -> insertSql.append(targetColumnName).append(",")); .append(targetColumnName)
.append(backtick)
.append(","));
int len = insertSql.length(); int len = insertSql.length();
insertSql.delete(len - 1, len).append(") VALUES ("); insertSql.delete(len - 1, len).append(") VALUES (");
@@ -101,6 +104,7 @@ public class RdbEtlService extends AbstractEtlService {
} }
len = insertSql.length(); len = insertSql.length();
insertSql.delete(len - 1, len).append(")"); insertSql.delete(len - 1, len).append(")");
logger.info("executeSqlImport sql:{}",insertSql.toString());
try (Connection connTarget = targetDS.getConnection(); try (Connection connTarget = targetDS.getConnection();
PreparedStatement pstmt = connTarget.prepareStatement(insertSql.toString())) { PreparedStatement pstmt = connTarget.prepareStatement(insertSql.toString())) {
connTarget.setAutoCommit(false); connTarget.setAutoCommit(false);

View File

@@ -281,6 +281,7 @@ public class SyncUtil {
// 只有当dbType为MySQL/MariaDB或OceanBase时返回反引号 // 只有当dbType为MySQL/MariaDB或OceanBase时返回反引号
switch (dbType) { switch (dbType) {
case mysql: case mysql:
return "`";
case mariadb: case mariadb:
case oceanbase: case oceanbase:
return "`"; return "`";