1

我有一张桌子

create table BD_VEHICLES_TEMP_1
(
  CONTRACT_NO           VARCHAR2(16) not null,
  ELIMINATED_FLG        VARCHAR2(1),
  ELIMINATION_CODE      VARCHAR2(2),
  PUBLISHED             VARCHAR2(1),
  BD_GRP_ID             VARCHAR2(10),
  EMD                   NUMBER(8),
  VALUATION_PRICE       NUMBER(8),
  DIVI                  VARCHAR2(2),
)

我做了一个对应的bean

并将其属性的值设置为

bean.setDIVI(row.getCell(27).getNumericCellValue()+"");

但是,在将 bean 插入数据库时​​,我收到以下错误

ORA-12899: value too large for column "AFSWEB"."BD_VEHICLES_TEMP_1"."DIVI" (actual: 4, maximum: 2)

我知道这与列的大小有关。DIVI 的 Excel 表中的数据是 11,13,45,67.. 等等所有 2 位数字。

可能是什么原因?解决办法是什么 ?

提前致谢 !

4

2 回答 2

1

Cell.getNumericCell() javadocs你会看到它返回一个double. 您似乎正在尝试使用一种相当奇怪的技术将其转换为字符串,并且您选择的方式double+""很可能会产生长字符串,因为双精度通常在小数点后有很多数字!

从您的表定义中:

DIVI                  VARCHAR2(2),

我推测您正在尝试将数字单元格转换为两位数的字符串。我不确定你为什么要这样做,而不是INTEGER在你的数据库中存储一个,但我希望你有一个很好的理由....假设是这样,你应该对DataFormatter做一些事情,比如

DataFormatter fmt = new DataFormatter();
String divi = fmt.formatCellValue(row.getCell(27).getNumericCellValue());
if (divi.length() > 2) {
   throw new IllegalStateException("Row should contain a 2 digit number, found " + divi);
}
bean.setDIVI(divi);
于 2013-08-14T09:18:41.527 回答
0

尝试打印分配的值,这样您就可以看到传递给数据库的内容:

String value = row.getCell(27).getNumericCellValue()+""; 
// or Integer.toString(row.getCell(27).getNumericCellValue()) 
System.out.println("'" + value + "'");

同时显示您的 JDBC 语句。

它可能与Unicode有关吗?UTF16 将使您的字符串长度加倍。

于 2013-08-14T08:32:09.523 回答