从PL-SQL表中获取数据作为Java中的OUT参数

时间:2011-09-29 02:39:42

标签: java oracle jdbc

我正在从java代码执行一个过程,它有2个参数,其中一个是Object表。这是包

的概述
PROCEDURE SalesProc (
  p_S_table             IN t_s_table
, p_T_table             IN OUT t_t_table           
, x_message             OUT VARCHAR2                     

t_table是IN OUT参数,其中包含多个String和Numbers。在执行包之前,我创建了一个SalesObject数组并设置它。

这里,目的是使用resultSet从t_table获取一些值。

我想要开始工作的来源是:

 callstmt.registerOutParameter(2, Types.ARRAY,"T_TABLE");
 callstmt.setArray(2, mySalesObjectArray);
 callstmt.execute();
 java.sql.Array aa = callstmt.getArray(2);
 ResultSet rs = aa.getResultSet();

 while(rs.next()){
     String ss = rs.getString(1);
 }

以下行是“java.sql.exception

  String ss = rs.getString(1);

我也尝试将其转换为Object类型,如下所示

 salesObject[] sArray = (salesObject[])callstmt.getArray(2);

抛出classCastException。 “classcastException.Cannot cast java.lang.Object[2][id=16062] to java.lang.String[]


如何避免这些例外?

1 个答案:

答案 0 :(得分:0)

你有3个参数,计数从最左边参数的1开始:

  1. p_S_table
  2. p_T_table
  3. t_t_table
  4. 我使用Oracle作为DBMS但没有使用IN / OUT参数但我确信如果你将程序改为函数(因为函数返回一些东西),它接受IN参数并返回OUT参数,相同的代码将起作用。

    至于铸造:

    salesObject[] sArray = (salesObject[])callstmt.getArray(2); 
    

    您的salesObject课程应实施ORADataSQLDataSQLData似乎更好。