csvivian 2011-09-21 00:05
浏览 272
已采纳

Oralce11g创建过程,Java调用问题

在11gz中创建了一个过程,由Java调用,中间老是报这个错:[code="java"]java.sql.SQLException: 类型长度大于最大值[/code]
大家可不可以帮忙看看?使用的是ojbdc14.jar,网上有文章说,是驱动问题,可是换了ojdbc5.jar、ojdbc6.jar都试过,也还是有这个问题。
谢谢各位了。

程序所要实现的功能是这样的:
编写一个过程,输入部门号,返回该部门下所有员工的信息,并用Java调用。
数据在emp表中

Oracle11g创建存储过程代码如下:
[code="java"]
--建包
create or replace package t_pac_page as
--定义一个名为test_cursor的游标
type test_cursor is ref cursor;
end t_pac_page;
/

--建过程
create or replace procedure t_page
(p_deptno in number,p_cursor out t_pac_page.test_cursor) is
begin
open p_cursor for select * from emp where deptno=p_deptno;
end t_page;
/

[/code]

Java调用过程的代码如下:
[code="java"]
public static void main(String[] args)
{
Connection conn = null;
CallableStatement stmt = null;

    try
    {
        Class.forName(className);
        conn = DriverManager.getConnection(url, user, password);
        String sql = "{call t_page(?,?)}";

        stmt = conn.prepareCall(sql);
        stmt.setInt(1, 10);
        stmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
        stmt.execute();

        ResultSet rs = (ResultSet)stmt.getObject(2);
        while(rs.next())
        {
            System.out.println(rs.getInt(1) + " " + rs.getInt(2) + " " + rs.getInt(3));
        }

        stmt.close();
        conn.close();

        System.out.println("........");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            if (stmt != null)
                stmt.close();
            if (conn != null)
                conn.close();
        }
        catch (Exception e)
        {
        }
    };
}

[/code]

这两行是没问题的,使用全局变量中定义好的className、url、user、password
[code="java"]
Class.forName(className);

conn = DriverManager.getConnection(url, user, password);

[/code]
执行后,就报后边这个错:
[code="java"]
java.sql.SQLException: 类型长度大于最大值
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:885)
at oracle.jdbc.driver.T4CMAREngine.buffer2Value(T4CMAREngine.java:2231)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB2(T4CMAREngine.java:1048)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:112)
at oracle.jdbc.driver.T4CTTIdcb.receiveFromRefCursor(T4CTTIdcb.java:104)
at oracle.jdbc.driver.T4CResultSetAccessor.unmarshalOneRow(T4CResultSetAccessor.java:165)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:788)
at oracle.jdbc.driver.T4CTTIrxd.unmarshal(T4CTTIrxd.java:705)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:527)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:180)
at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:783)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2979)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4103)
at com.uu.test.oracle.test.PageTest.main(PageTest.java:37)
[/code]

困扰好久了,一直没找到是哪的问题。看到这篇文章的,如能停留一下目光。真的会非常感谢

  • 写回答

4条回答 默认 最新

  • qq1988627 2011-09-21 08:32
    关注

    驱动问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?