diff --git a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java b/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java index b2c0e2a9d35fa83e8d2f6c405e5ea4c2428e8282..e2e54018b7be2eededbd1ea7db882f8604503b37 100644 --- a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java +++ b/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java @@ -1,27 +1,22 @@ package com.alibaba.otter.canal.client.adapter.rdb.support; +import com.alibaba.otter.canal.client.adapter.rdb.config.MappingConfig; +import com.alibaba.otter.canal.client.adapter.support.Util; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.Reader; import java.io.StringReader; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Timestamp; -import java.sql.Types; +import java.sql.*; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; -import org.apache.commons.lang.StringUtils; - -import com.alibaba.otter.canal.client.adapter.rdb.config.MappingConfig; -import com.alibaba.otter.canal.client.adapter.support.Util; - public class SyncUtil { + private static final Logger logger = LoggerFactory.getLogger(SyncUtil.class); public static Map getColumnsMap(MappingConfig.DbMapping dbMapping, Map data) { return getColumnsMap(dbMapping, data.keySet()); @@ -93,37 +88,38 @@ public class SyncUtil { } break; case Types.TINYINT: + // 向上提升一级,处理unsigned情况 if (value instanceof Number) { - pstmt.setByte(i, ((Number) value).byteValue()); + pstmt.setShort(i, ((Number) value).shortValue()); } else if (value instanceof String) { - pstmt.setByte(i, Byte.parseByte((String) value)); + pstmt.setShort(i, Short.parseShort((String) value)); } else { pstmt.setNull(i, type); } break; case Types.SMALLINT: if (value instanceof Number) { - pstmt.setShort(i, ((Number) value).shortValue()); + pstmt.setInt(i, ((Number) value).intValue()); } else if (value instanceof String) { - pstmt.setShort(i, Short.parseShort((String) value)); + pstmt.setInt(i, Integer.parseInt((String) value)); } else { pstmt.setNull(i, type); } break; case Types.INTEGER: if (value instanceof Number) { - pstmt.setInt(i, ((Number) value).intValue()); + pstmt.setLong(i, ((Number) value).longValue()); } else if (value instanceof String) { - pstmt.setInt(i, Integer.parseInt((String) value)); + pstmt.setLong(i, Long.parseLong((String) value)); } else { pstmt.setNull(i, type); } break; case Types.BIGINT: if (value instanceof Number) { - pstmt.setLong(i, ((Number) value).longValue()); + pstmt.setBigDecimal(i, new BigDecimal(value.toString())); } else if (value instanceof String) { - pstmt.setLong(i, Long.parseLong((String) value)); + pstmt.setBigDecimal(i, new BigDecimal(value.toString())); } else { pstmt.setNull(i, type); }