【问题标题】:java.sql.SQLException: Internal Error: Invalid type oid?java.sql.SQLException:内部错误:无效类型 oid?
【发布时间】:2011-09-19 15:19:05
【问题描述】:

我在这一行收到此错误:

Object[] results = (Object[])stmt.getArray(1).getArray();

不知道是什么意思……

我也可以显示 sql...谁能解释这个错误的含义...如果需要,我也有那个 stac 跟踪

public List<SimilarItemSearchCollectBean> getSimilarItemSearchCollect(
        PagerTagHelper pagerHelper,
        String codes,
        String params[] )
            throws Exception
                {

    if( params.length != codes.length() ) throw new IllegalArgumentException(
                "Number of codes does not match number of parameters: (" +
                codes.length() + " != " + params.length + ")."
                );

            int i = 0;
            String temp = null;
            List<SimilarItemSearchCollectBean> collected = null;
            String funCall = "{ call ? := " + PKG_PREFIX
            + "summarize_item_search_data( ?, ?, ?, ?, ?, ?, ?, ?, ? ) }";

            OracleCallableStatement stmt = null;

            try
            {
                java.util.Map<String,Class<?>> map = connection.getTypeMap();
                map.put( schemaProvider.getSystemSchemaName()+".SIMILAR_ITEM_SEARCH_ROLLUP", SimilarItemSearchCollectBean.class );

                stmt = (OracleCallableStatement)connection.prepareCall( funCall );

                stmt.registerOutParameter(
                1, OracleTypes.ARRAY, schemaProvider.getSystemSchemaName()+".BEAN_LIST" );

                stmt.setInt( 2, pagerHelper.getStartIndex() );
                stmt.setInt( 3, pagerHelper.getEndIndex() );
                stmt.setObject( 4, DAOUtil.getARRAY( DAOUtil.ArrayTypes.CHAR_TAB, pagerHelper.getPropertyNames() ));
                stmt.setObject( 5, DAOUtil.getARRAY( DAOUtil.ArrayTypes.CHAR_TAB, pagerHelper.getSortOrders() ));

                /* Initialize all the parameters to null.
                 * We will re set them individually in the switch if
                 * there is an actual value.
                 */

                stmt.setString( 6, null  );     // value1
                stmt.setString( 7, null  );     // value2
                stmt.setNull( 8, OracleTypes.NUMBER );      // sac
                stmt.setNull( 9, OracleTypes.NUMBER );     // job type id
                stmt.setNull( 10, OracleTypes.NUMBER );  // standard unit price

                // Still need to decide how searching will occur for year ranges
                for( i=0; i<codes.length(); i++ )
                {
                    if ( params[i] != null )
                    {
                        switch( codes.charAt(i) )
                        {
                        case '0':   // VALUE1
                            temp = params[i].replace( '*', '%' );
                            temp = temp.replaceAll("%+", "%");
                            stmt.setString( 6, temp );
                            break;
                        case '1':   // VALUE2
                            stmt.setString( 7, params[i] );
                            break;
                        case '2':   // VALUE3
                            stmt.setInt( 8, Integer.parseInt(params[i]) );
                            break;
                        case '3':   // JOB TYPE ID
                            stmt.setLong( 9, Long.parseLong( params[i] ) );
                            break;
                        case '4':   // VALUE4
                            stmt.setLong( 10, Long.parseLong(params[i]));
                            break;


                        default:

                        } // end switch
                    } // if not null
                } // end for

                stmt.execute();

                // ERROR  HERE:
                Object[] results = (Object[])stmt.getArray(1).getArray();


                collected = new ArrayList<SimilarItemSearchCollectBean>();
                for( i=0; i<results.length; i++ )
                    collected.add( (SimilarItemSearchCollectBean)results[i] );

            } // end try
            finally { close( stmt ); }
            return collected;
        } // end 

【问题讨论】:

    标签: java sql


    【解决方案1】:

    不熟悉OracleCallableStatement,但不应该是这样的

    Object[] results = (Object[])(stmt.getARRAY(1).getArray());
    

    oracle.jdbc.OracleCallableStatement#getARRAY(int)OracleCallableStatement 特有的,getArray() 似乎继承自 java.sql.CallableStatement#getArray(int)

    已经说过我对此不熟悉,但getARRAY 似乎更适合您注册为输出参数的OracleTypes.ARRAY 类型。

    【讨论】:

      猜你喜欢
      • 2012-03-21
      • 2013-01-26
      • 1970-01-01
      • 2014-07-21
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多