Java 为什么oracle jdbc驱动程序在将数字转换为字符串时截断前导零
当db中的字段类型为number,java bean的字段类型为string时,oracle jdbc驱动程序将数字转换为前导零截断的字符串,例如Java 为什么oracle jdbc驱动程序在将数字转换为字符串时截断前导零,java,oracle,jdbc,Java,Oracle,Jdbc,当db中的字段类型为number,java bean的字段类型为string时,oracle jdbc驱动程序将数字转换为前导零截断的字符串,例如0.5到.5 我已经跟踪了oracle的jdbc驱动程序实现的源代码,然后在下面的oracle.jdbc.driver.NumberCommonAccessor类中找到了这段代码: String getString(int var1) throws SQLException { byte[] var3 = this.rowSpaceByte;
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);
}
}
String getString(int var1)抛出SQLException{
byte[]var3=this.rowSpaceByte;
int var4=this.columnIndex+this.byteLength*var1+1;
字节var5=var3[var4-1];
字节[]var6=新字节[var5];
数组副本(var3,var4,var6,0,var5);
编号var7=新编号(var6);
字符串var8=NUMBER.toString(var6);
int var9=var8.length();
**if(var8.startsWith(“0”)| | var8.startsWith(“-0”)){
--var9;
}**
if(var9
为什么oracle jdbc驱动程序在将数字转换为时截断前导零
串
隐式转换就是这样工作的。数字数据类型没有任何前导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
但是,为什么当jdbc驱动程序将相同的值转换为java的数字数据类型(如int或long)时,就没有这种转换呢?这个NumberCommonAccessor是一些新的ojdbc jar的一部分吗?以前我从未遇到过这个问题,但现在我也遇到了这个问题。