当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);
}
}
答案 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