程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> java.sql.Batch Update Exception:ORA-12899

java.sql.Batch Update Exception:ORA-12899

編輯:DB2教程

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)
);


 



 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved