【发布时间】:2017-08-15 09:04:01
【问题描述】:
当db中的字段类型为数字,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);
}
}
【问题讨论】:
-
这个 NumberCommonAccessor 是一些新的 ojdbc jar 的一部分吗?以前我从来没有遇到过这个问题,但现在我也遇到了这个问题。