设为首页 加入收藏

TOP

java.sql.Batch Update Exception:ORA-12899
2015-11-21 01:41:22 来源: 作者: 【 】 浏览:0
Tags:java.sql.Batch Update Exception: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)
);


?



?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇rocksdb使用 下一篇数据库-数据库概论

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: