Przeglądaj źródła

fix:数据源的数据类型与目标数据字段不一致的兼容处理

yjwang 2 lat temu
rodzic
commit
41a1fdaed4

+ 5 - 0
dbsyncer-common/src/main/java/org/dbsyncer/common/util/DateFormatUtil.java

@@ -93,4 +93,9 @@ public abstract class DateFormatUtil {
         return OffsetDateTime.from(parsedTimestamp).withOffsetSameInstant(ZoneOffset.UTC);
     }
 
+    private static ZoneId zoneId = ZoneId.systemDefault();
+
+    public static String dateToChineseStandardTimeString(java.util.Date date) {
+        return date.toInstant().atZone(zoneId).toLocalDateTime().format(CHINESE_STANDARD_TIME_FORMATTER);
+    }
 }

+ 5 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/setter/TimestampSetter.java

@@ -6,6 +6,7 @@ import java.sql.Date;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Timestamp;
+import java.time.LocalDateTime;
 
 public class TimestampSetter extends AbstractSetter<Timestamp> {
 
@@ -20,6 +21,10 @@ public class TimestampSetter extends AbstractSetter<Timestamp> {
             Date date = (Date) val;
             ps.setTimestamp(i, new Timestamp(date.getTime()));
             return;
+        } else if (val instanceof LocalDateTime) {
+            LocalDateTime dateTime = (LocalDateTime) val;
+            ps.setTimestamp(i, Timestamp.valueOf(dateTime));
+            return;
         }
         ps.setTimestamp(i, Timestamp.valueOf(String.valueOf(val)));
     }

+ 17 - 2
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/setter/VarcharSetter.java

@@ -1,10 +1,14 @@
 package org.dbsyncer.connector.database.setter;
 
-import org.dbsyncer.connector.ConnectorException;
+import org.dbsyncer.common.util.DateFormatUtil;
 import org.dbsyncer.connector.database.AbstractSetter;
 
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
 
 public class VarcharSetter extends AbstractSetter<String> {
 
@@ -18,7 +22,18 @@ public class VarcharSetter extends AbstractSetter<String> {
         if (val instanceof byte[]) {
             ps.setString(i, new String((byte[]) val));
             return;
+        } else if (val instanceof LocalDateTime) {
+            ps.setString(i, ((LocalDateTime) val).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            return;
+        } else if (val instanceof LocalDate) {
+            ps.setString(i, ((LocalDate) val).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            return;
+        } else if (val instanceof Date) {
+            ps.setString(i, DateFormatUtil.dateToChineseStandardTimeString((Date) val));
+            return;
+        } else {
+            ps.setString(i, val.toString());
         }
-        throw new ConnectorException(String.format("VarcharSetter can not find type [%s], val [%s]", type, val));
+//        throw new ConnectorException(String.format("VarcharSetter can not find type [%s], val [%s]", type, val));
     }
 }