为什么oracle jdbc驱动程序在将数字转换为字符串时截断前导零

时间:2017-03-23 01:00:24

标签: java oracle jdbc

当db中的字段类型为number且java bean的字段类型为字符串时,oracle jdbc驱动程序会将数字转换为前导零截断的字符串,例如0.5.5

我已经跟踪了oracle的jdbc驱动程序实现的源代码,然后我在oracle.jdbc.driver.NumberCommonAccessor的类中找到了以下代码:

String getString(int var1) throws SQLException {
   byte[] var3 = this.rowSpaceByte;
            int var4 = this.columnIndex + this.byteLength * var1 + 1;
            byte var5 = var3[var4 - 1];
            byte[] var6 = new byte[var5];
            System.arraycopy(var3, var4, var6, 0, var5);
            NUMBER var7 = new NUMBER(var6);
            String var8 = NUMBER.toString(var6);
            int var9 = var8.length();
            **if(var8.startsWith("0.") || var8.startsWith("-0.")) {
                --var9;
            }**

            if(var9 <= 38) {
                return var7.toText(38, (String)null).trim();
            } else {
                var8 = var7.toText(-44, (String)null);
                int var10 = var8.indexOf(69);
                int var11 = var8.indexOf(43);
                if(var10 == -1) {
                    var10 = var8.indexOf(101);
                }

}

1 个答案:

答案 0 :(得分:0)

  

为什么oracle jdbc驱动程序在将数字转换为时截断前导零   串

隐式转换以这种方式工作。 number数据类型没有任何前导0,
2只是2,而不是002不是00000002 您可以在查询中使用to_char函数,使用带有前导零的某种格式将数字转换为字符串,例如:

select to_char( 1,'09999' ) as X,
       to_char( 22, '0999999999' ) as y
from dual;

X      Y         
------ -----------
 00001  0000000022