运行环境
spring 1.2.8
hibernate 3.1.
oracle 10.2.0.1.0
tomcat 5.0 28
oracle数据库连接用的是hibernate3连接的方式
驱动用的是oracle9i客户端中的classes12.jar
创建存储过程返回游标集
使用jdbcTemplate注入 获得Connection调用prepareCall方法 报如下错误
同样直接才JDBC下运行同样出错
运行死活报错,要么java.sql.SQLException: 类型长度大于最大值
要么java.sql.SQLException: 违反协议,(其他问题如:操作这样的数据clob可能如此)
当时客户要得急 我就只能动态使用拼写一个超长的SQL语句,参数也还超多
当时的java代码调用存储过程如下:
CallableStatementCallback cscb = new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.registerOutParameter(1,OracleTypes.CURSOR);
cs.setString(2,merchant_no);
cs.setString(3,point_no);
cs.setString(4,terminal_no);
cs.setString(5,card_type);
cs.setDate(6,account_date1);
cs.setDate(7,account_date2);
cs.setDate(8,transact_time1);
cs.setDate(9,transact_time2);
cs.setString(10,card_logical_number);
cs.setString(11,card_face_no);
cs.execute();
return cs.getObject(1);
}
};
ResultSet rs=(ResultSet)jdbcTemplate.execute("{Call acc_card.transact_data_query(?,?,?,?,?,?,?,?,?,?,?)}", cscb);
while(rs.next()){
System.out.println(rs.getString(2)+"\n\n\n");
}
如下异常:
java.sql.SQLException: 类型长度大于最大值
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:884)
at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2230)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB4(T4CMAREngine.java:1146)
at oracle.jdbc.driver.T4CMAREngine.unmarshalDALC(T4CMAREngine.java:2097)
at oracle.jdbc.driver.T4C8TTIuds.unmarshal(T4C8TTIuds.java:127)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:125)
at oracle.jdbc.driver.T4CTTIdcb.receiveFromRefCursor(T4CTTIdcb.java:103)
at oracle.jdbc.driver.T4CResultSetAccessor.unmarshalOneRow(T4CResultSetAccessor.java:165)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:787)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:704)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:526)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:179)
at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:782)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1027)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2887)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2978)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4102)
at getConnection.TestProcedure.main(TestProcedure.java:37)
java.sql.SQLException: 违反协议
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:884)
at oracle.jdbc.driver.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:132)
at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:384)
at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:1035)
at getConnection.TestProcedure.closeConn(TestProcedure.java:70)
at getConnection.TestProcedure.main(TestProcedure.java:47)
在英文环境下
(java.sql.SQLException: Bigger type length than Maximum)
这种现象很可能是驱动版本太低导致(首先保证你的存储过程无问题,java书写方式正确),
后来改成版本更改的java ORCLE驱动 问题立即解决(换成ora9.2.0.3-jdk1.4.jar)
看国外网站也是这么说(2003,2004年),当时他们建议oralce公司 升级该驱动
主要原因是classes12.jar 驱动的BUG所致,版本不支持,不支持oralce10g的某些特性,需要及时更新最新的oracle驱动 jar包,这只是一种很有可能存在的问题一个方面。
分享到:
相关推荐
Oracle连接数据库驱动jar,无毒、无马、无插件请放心使用,如有不会请M QQ:11083269.
Oracle的JDBC驱动程序分为不同版本,如 Thin、OCI(Oracle Call Interface)、JDBC-ODBC桥等,而`classes12.jar`通常与Thin驱动相关,它是一种纯Java实现,不需要Oracle客户端软件就可以直接连接到数据库服务器。...
Oracle-classes14.jar.jar.rar 是一个压缩文件,包含了Oracle数据库相关的类库,特别是 `classes14.jar` 文件。这个文件通常与Oracle JDBC驱动程序有关,JDBC(Java Database Connectivity)是Java语言用来连接...
Oracle驱动包`classes12.jar`和`ojdbc14.jar`是Oracle公司提供的Java数据库连接(JDBC)驱动程序,用于与Oracle数据库进行通信。这两个文件在Java应用程序中扮演着至关重要的角色,特别是对于那些需要与Oracle数据库...
在Oracle环境中,"classes12.jar"是一个关键的Java类库,它包含了Oracle JDBC驱动程序,用于Java应用程序与Oracle数据库进行交互。这个库文件在Oracle 9i及之后的版本中被广泛使用,对于开发人员来说是非常重要的。 ...
java语言连接oracle数据库的驱动文件
classes12.jar为oracle数据库所需要的驱动JAR
classes12.jar则是Oracle 9i和10g版本中的一个核心库,包含了许多与Oracle数据库交互所需的基本类和接口。尽管ojdbc14.jar已经包含了大部分必要的功能,但某些特定的Oracle特性或旧版本的数据库可能需要classes12....
在Oracle 8、Oracle 9i、Oracle 10g、Oracle 11g以及Oracle 12c等不同版本中,`classes12.jar`都发挥了关键作用。JDBC驱动主要分为四种类型:Type 1(纯Java驱动)、Type 2(混合型驱动)、Type 3(网络协议驱动)和...
`nls_charset12.jar`是Oracle 10g中的一个组件,其中“NLS”代表“National Language Support”,这个包主要涉及Oracle数据库的字符集支持。字符集决定了数据库如何存储、检索和比较文本数据。在Oracle 10g中,`nls_...
"classes12.jar"是Oracle官方提供的JDBC驱动程序,它是Java应用程序连接Oracle 11g数据库的关键组件。本文将深入探讨这个jar包的作用、工作原理以及如何在实际开发中使用。 首先,"classes12.jar"包含了Oracle JDBC...
在你提供的文件列表中,`clases12.jar`、`ojdbc5.jar`和`ojdbc6.jar`都是Oracle 11g JDBC驱动的重要组成部分。 1. `classes12.jar`: 这个文件包含了Oracle JDBC驱动的主要类库,主要用于连接Oracle数据库。它支持...
`classes 12.jar`中包含的类库是Java标准版(JRE)的核心组成部分,这些类库由Sun Microsystems(现已被Oracle收购)开发并维护,它们构成了Java语言的基础框架。 `.jar`文件的结构类似于传统的ZIP文件,可以包含类...
Oracle 19C驱动是Oracle数据库19c版本的Java Database Connectivity (JDBC)驱动程序,主要用于Java应用程序与Oracle 19c数据库之间的通信。在Java应用中,JDBC驱动是一个关键组件,它允许程序通过Java语言访问和操作...
在Java开发中,与Oracle数据库交互通常需要使用Oracle提供的JDBC驱动,其中ojdbc7.jar是Oracle 12c Release 1版本的驱动包,支持Java 7及更高版本。在本场景中,由于在Maven仓库中找不到ojdbc7.jar,因此需要开发者...
在Oracle 12C中,JDBC驱动主要有两个版本:ojdbc8.jar和ojdbc.jar。这两个版本的驱动对应着不同的Oracle数据库版本和Java Development Kit (JDK) 版本,因此选择合适的驱动至关重要,否则可能导致各种运行时错误。 ...
ojdbc10.jar是Oracle JDBC驱动的一个版本,专门为JDK 10及更高版本设计。它包含了对Oracle 19c数据库的新特性和优化的支持,如新的SQL语法、性能改进以及对Java新特性的兼容。使用ojdbc10.jar时,确保你的开发环境...
“classes12.jar”则是Oracle数据库的JDBC驱动程序,是Java应用程序连接到Oracle数据库所必需的。它包含了Oracle数据库与Java应用程序之间通信所需的类和接口。当你的应用需要访问Oracle数据库时,需要将这个驱动...
其中,`ocrs12.jar`是一个关键的组件,它包含了Oracle JDBC驱动的特定实现,特别是针对Oracle 10g版本。 `ocrs12.jar` 文件中的一个重要特性是它引入了`javax.sql.rowset`接口,这是一个Java SQL API的一部分,用于...