ORA-01461: can bind a LONG value only for insert int

在csdn上看到的关于ORA-01461: can bind a LONG value only for insert int...

操作clob 大字段的can bind a LONG value only for insert into a LONG column 异常处理 收藏

开发架构:spring 2.0

DAO层:ibatis 2.3

DB: oracle 10g

需要在spring的application.xml的关于clob的配置。如下源码:

==========================================

<!-- spring提供的对ibatis大字段处理 -->
    <bean id="nativeJdbcExtractorNew" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true"/>
  
  
    <bean id="oracleLobHandlerNew" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
      <property name="nativeJdbcExtractor"><ref local="nativeJdbcExtractorNew"/></property>
</bean>
   
    <!-- SqlMap setup for iBATIS Database Layer -->
    <bean id="sqlMapClientNew" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="dataSource" ref="dataSourceNew" />
   <!-- 大字段处理 -->
   <property name="lobHandler"><ref local="oracleLobHandlerNew"/></property>
    </bean>

============================================

对clob的操作出现can bind a LONG value only for insert into a LONG column ,主要问题是在引入jar包上。

先说下我做的项目中大字段出现的问题时的系统引入的jar包,oracle版本:10g,用的驱动版本:classes12.jar的版本10.2.0.1.0。并且项目中同时还有ojdbc14.jar(10.02版本) 、ojdbc14dms.jar、classes12dms.jar、ojdbc14dms_g.jar这几个都设计数据库操作的jar包,Tomcat的lib下也是classes12.jar(10.2.0.1.0版本)。在项目具体模块中涉及到大字段的操作时候,始终出现can bind a LONG value only for insert into a LONG column 的sql异常。

在网上查了很多资料,都倾向于是使用的oracle版本和classes12.jar的版本不一致的问题所造成,因为项目使用的是oracle10g,换了classes12.jar(10.2.0.1.0版本)包与所使用的oracle版本一致了,但是在操作时问题依然出现sql的异常。

=================================================

解决方式:

            1.删除项目中的ojdbc14.jar(10.02版本) 、ojdbc14dms.jar、classes12dms.jar、

              ojdbc14dms_g.jar、classes12.jar(10.2.0.1.0版本)这样的jar。

            2.同时删除tomcat/lib下的classes12.jar包。

            3.用ojdbc14.jar(注意:Oracle JDBC Driver version - 10.1.0.2.0)添加到项目和tomcat中。

重启app,操作相应的用到大字段的模块,问题解决。

================================================================

问题的原因:

                驱动包classes12.jar用于JDK 1.2和JDK 1.3,而ojdbc14.jar用于JDK 1.4及以上,所以尽量不要使用classes12.jar;

              从oracle 9.2之后,对jdbc 的驱动程序的命名将有所改变,JDK1.1,JDK1.2的驱动程序名(class12.jar)将不再改变,一直沿用下去,从JDK1.4开始驱动程序名将所有改变,例如:JDK1.4的驱动名为ojdbc14.jar 。JDK1.5的驱动名为ojdbc15.jar  

    

来自: http://hi.baidu.com/twlb/blog/item/1e9949a6a96faf9cd0435847.html

你可能感兴趣的:(spring,jdk,oracle,ibatis,insert,oracle10g)