java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into

题记:

很奇怪哈,发表文章怎么有丢失,编辑的时候好好的,点击发布后就会丢失一部分信息,iteye怎么回事?

 

正文:

 

昨天工作中碰到这么一个error, oracle存入某个varchar2(4000)的数据时报的,

java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into

 

查了很多资料,也是众说纷纭,不过还是找到了答案,这个比较靠谱:

  • 为什么会发生这么个异常?

真正的原因是,超过了4k的字符数据,会被oracle直接转换成long型数据插入数据库,因为varchar2不能存储超过4k的数据,这个转化是为了减少认为的设置或者当初设计不当造成的错误。
我们不能出了错误先怪工具,自己不知道原理,结果是自己用错了东西造成的错误。
这里的4k,说的是字节数,但是,比如汉字,在数据库选择zhs16gbk的时候,会使用两个字节来存一个汉字,所以,你的汉字超过2k的时候,实际需要的存储字节就超过了4k,这时候,varchar2类型当然不够空间了,oracle就执行了把这段字符数据向long型数据的转化。而在表结构上,就出现了“向一个varchar2型数据列插入一个long型数据”,当然就报错了!
“can bind a LONG value only for insert into a LONG column ”提示也说的很清楚,“只能把long型数据插入一个long型数据列”。当然不能“把long型数据插入到xx(非long)数据列”了

 

  • 解决办法

Oracle驱动的版本不对,如果你的JDK版本是1.2 1.3的,那就检查你的驱动包classes12.jar的版本是否与数据库版本一致,如果你的JDK是更高版本的,检查你的驱动包classes12.jar或ojdbc14.jar或ojdbc5.jar或ojdbc6.jar是否与数据库版本一致,换成一致的就OK了!

 

参考链接:

 

ojdbc版本区别 ojdbc14.jar ojdbc5.jar ojdbc6.jar

http://blog.csdn.net/cooljun618/article/details/6929553

 


Oracle驱动classes12.jar 与ojdbc14.jar
http://applelini.blog.163.com/blog/static/9865278020118284827234/

 

 

 

你可能感兴趣的:(jdk,oracle,SQLException,classes.jar,ojdbc.jar)