java.sql.BatchUpdateException: ORA-12899
最近遇到一个问题,在用JDOM组件解析XML文件数据,并将数据存储到oracle数据库时,出现了如下错误:
Exception in thread "main" java.sql.BatchUpdateException: ORA-12899: value too large for column "SCOTT"."EMP1"."JOB" (actual: 12, maximum: 9)at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:367)at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:8738)at com.uestc.util.InsertEmp.main(InsertEmp.java:48)
要解析的XML文件如下所示:
1000 诸葛亮 经理 1998-09-19 3000 500 1001 关云长 经理 1999-03-12 3500 200 1002 赵子龙 项目经理 2000-07-27 5000 1600 1003 刘玄德 人事 2001-03-14 2000 1300
事先已在oracle数据库中创建了emp1表,创建脚本语句为:
CREATE TABLE emp1(
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2)
);
问题的原因是对oracle中文字符集编码的了解不够。
查看oraccle server端字符集,输入以下查询语句:
select userenv('language') from dual;
如果显示的是以下内容:
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
则oracle每个汉字字符占据两个字节。
如果显示的是以下内容:
SIMPLIFIED CHINESE_CHINA.AL32UTF8
则oracle每个汉字占据三个字节。经查询本地的数据库编码是AL32UTF8,每个汉字占3个字节,因此job中“项目经理”占据了12个字节,而创建的数据库表中只分配了9个字节,因此抛出了这个异常。将数据表的创建脚本改为如下所示,问题就解决了:
CREATE TABLE emp1(
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(12),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2)
);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
