Bläddra i källkod

修复oracle精度对不同java类型问题

life 1 år sedan
förälder
incheckning
88a23358f7

+ 19 - 2
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/logminer/parser/AbstractParser.java

@@ -58,8 +58,7 @@ public abstract class AbstractParser implements Parser {
                     columnMap.get(field.getName()));
                     columnMap.get(field.getName()));
             switch (field.getType()) {
             switch (field.getType()) {
                 case Types.NUMERIC:
                 case Types.NUMERIC:
-                case Types.BIGINT:
-                    data.add(oracleColumnValue.asBigInteger());
+                    data.add(convertNumber(oracleColumnValue,field));
                     break;
                     break;
                 case Types.DECIMAL:
                 case Types.DECIMAL:
                     data.add(oracleColumnValue.asBigDecimal());
                     data.add(oracleColumnValue.asBigDecimal());
@@ -79,6 +78,24 @@ public abstract class AbstractParser implements Parser {
         return data;
         return data;
     }
     }
 
 
+    private Object convertNumber(OracleColumnValue oracleColumnValue,Field field) {
+        if (field.getRatio() <=0){
+            int result =field.getColumnSize() - field.getRatio();
+            if ( result <10){
+                return oracleColumnValue.asInteger();
+            }
+            if (result <19){
+                return oracleColumnValue.asBigInteger();
+            }
+            if (result <39){
+                return oracleColumnValue.asBigDecimal();
+            }
+            return oracleColumnValue.asString();
+        }else{
+            return oracleColumnValue.asBigDecimal();
+        }
+    }
+
 
 
     public void setFields(List<Field> fields) {
     public void setFields(List<Field> fields) {
         this.fields = fields;
         this.fields = fields;

+ 3 - 0
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/logminer/parser/OracleColumnValue.java

@@ -54,6 +54,9 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
 
 
     @Override
     @Override
     public Integer asInteger() {
     public Integer asInteger() {
+        if (asString() == null){
+            return null;
+        }
        return Integer.valueOf(asString());
        return Integer.valueOf(asString());
     }
     }
 
 

+ 16 - 0
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/model/Field.java

@@ -135,6 +135,22 @@ public class Field {
         return this;
         return this;
     }
     }
 
 
+    public int getColumnSize() {
+        return columnSize;
+    }
+
+    public void setColumnSize(int columnSize) {
+        this.columnSize = columnSize;
+    }
+
+    public int getRatio() {
+        return ratio;
+    }
+
+    public void setRatio(int ratio) {
+        this.ratio = ratio;
+    }
+
     @Override
     @Override
     public String toString() {
     public String toString() {
         return JsonUtil.objToJson(this);
         return JsonUtil.objToJson(this);