运行环境
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包,这只是一种很有可能存在的问题一个方面。
分享到:
相关推荐
- 为了使Tomcat能够识别并连接到Oracle数据库,你需要将Oracle JDBC驱动的JAR文件(在这种情况下是`classes12.jar`和`nls_charset12.jar`)复制到`%TOMCAT_HOME%\common\lib`目录。这些JAR文件通常位于`%oracle_...
常用的Oracle JDBC驱动包括`classes12.jar`和`ojdbc14.jar`。这些JAR文件通常位于Oracle安装目录下的`oracle\product\10.2.0\db_1\jdbc\lib\`路径中。正确配置这些驱动是Java应用连接Oracle数据库的基础。 **1.2 ...
- 配置完成后,需要确保Tomcat的`lib`目录下包含了对应数据库的驱动JAR包,例如对于Oracle,需要`classes12.jar`。 3. **web.xml配置**: - 在Web应用的`WEB-INF/web.xml`文件中,需要配置资源引用`...
在本例中,使用的是Oracle的JDBC驱动`classes12.jar`。正确的安装位置是在Tomcat的`common/lib`目录下,而不是`shared/lib`目录。这是因为在`shared/lib`下的JDBC驱动无法被JNDI识别。具体操作如下: - 将`classes...
1. **添加JDBC驱动**:如果运行数据库为Oracle,则需将Oracle的JDBC驱动文件(通常是`classes12.jar`)拷贝到Cognos安装目录下的`webapps/p2pd/WEB-INF/lib`文件夹中。 2. **检查数据库配置**:确保数据库连接字符串...
将对应的数据库驱动jar包放入Tomcat的`lib`目录中。例如,如果使用的是Oracle数据库,则需要将`ojdbc.jar`文件放入`lib`目录。 ##### 2.4 测试程序 对于连接池的测试,可以通过编写简单的Java程序来验证配置是否...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...