|
@@ -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<String, String> getColumnsMap(MappingConfig.DbMapping dbMapping, Map<String, Object> 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);
|
|
|
}
|