由于数据库ojdbc14.jar版本不正确导致ORA-01461问题的解决方法

来源:互联网 发布:网络共享用户账户限制 编辑:程序博客网 时间:2024/05/31 19:23


今天在部署主站的过程中,出现了由于ojdbc14.jar版本不正确导致了ORA-01461问题,现将处理过程简单记录一下:

1、应用程序报错信息如下:

2013-04-03 14:34:54,671 ERROR [com.pda.thread.asyn.schedule.DefaultWriteSchedule] - <澶勭悊鏁版嵁com.hzjbbis.db.pda.model.LogUploadRecord@2c5444澶辫触!>org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO RZ_RWZXJL(RZID,RZLX,JLXH,ZDCZY,ZDXLH,YWKXLH,CZYKXLH,TXDZ,ZXJG,CSBZ,CSSJZ,FJSJ,SJSJ,CZSJ,SCSJ,YWCLBZ)VALUES(S_RZ_RWZXJL.NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,TO_DATE(?,'YYMMDDHH24MISS'),TO_DATE(?,'YYMMDDHH24MISS'),SYSDATE,'0')]; SQL state [72000]; error code [1461]; ORA-01461: can bind a LONG value only for insert into a LONG column; nested exception is java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG columnat org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:124)at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:606)at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:791)at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:814)at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:214)at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:218)at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.update(SimpleJdbcTemplate.java:229)at com.pda.thread.asyn.service.impl.LogRecordServiceImpl.saveTaskExecuteResult(LogRecordServiceImpl.java:181)at com.pda.thread.asyn.HandleLogUploadThread$1.process(HandleLogUploadThread.java:120)at com.pda.thread.asyn.HandleLogUploadThread$1.process(HandleLogUploadThread.java:1)at com.pda.thread.asyn.schedule.DefaultWriteSchedule.write(DefaultWriteSchedule.java:31)at com.pda.thread.asyn.schedule.DefaultWriteSchedule.run(DefaultWriteSchedule.java:42)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)at java.util.concurrent.FutureTask.run(FutureTask.java:138)at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)at java.lang.Thread.run(Thread.java:619)Caused by: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG columnat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:623)at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:181)at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:543)at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2960)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)at oracle.jdbc.internal.OraclePreparedStatement$$EnhancerByProxool$$4edcc6be.executeUpdate(<generated>)at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:797)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:590)... 16 more

2、这里提到的错误汇总信息如下:

ORA-01461: can bind a LONG value only for insert into a LONG column
; nested exception is java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column

 

3、网上查找错误原因是:由于应用程序中使用的驱动程序与Oracle服务器端的版本不一致导致的。

数据库服务器上驱动程序位置如下:D:\oracle\product\10.1.0\Db_1\jdbc\lib\ojdbc14.jar

数据库服务器上替换为应用程序中的驱动文件ojdbc14.jar即可。

 

4、小结

从此问题分析和处理过程中我们得到的经验和教训是:需要充分重视应用程序开发与数据库技术结合的重要性!
任何细节上的疏忽都有可能对生产环境产生重大的影响