java - Oracle 将 xls 中的行插入数据库给出 ORA-12899 : value too large for column "AFSWEB" ."BD_VEHICLES_TEMP_1" ."DIVI"

标签 java oracle jdbc apache-poi poi-hssf

我有一张 table

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 位数字。

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

提前致谢!

最佳答案

来自Cell.getNumericCell() javadocs你会看到它返回一个double。您似乎正在尝试使用一种相当奇怪的技术将其转换为字符串,并且您选择的 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);

关于java - Oracle 将 xls 中的行插入数据库给出 ORA-12899 : value too large for column "AFSWEB" ."BD_VEHICLES_TEMP_1" ."DIVI",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18224893/

相关文章:

java - 驱动程序 oracle.jdbc.OracleDriver 声称不接受 jdbcUrl

java - 确定哪个 CSS 框架与 Selenium 一起使用

sql - 排除非排他性出现的值对

java - 如何让 postgres JDBC 在 Scala Mac OS 中工作?

sql - 如何验证 Oracle 序列

java - Android Oracle 数据库 JDBC6

java - 在 Java 中将准备好的语句 OBJECTS 放在哪里?

java - Firefox Selenium 驱动程序任意加载失败

java - Java中如何限制最大线程数?

java - Android:在编辑文本中插入空格会导致崩溃