java.sql.SQLException:索引:: 3处缺少IN或OUT参数

时间:2013-01-24 21:53:22

标签: java hibernate

我正在尝试从下面的Java代码执行存储过程,但在执行时我得到了所有这些奇怪的异常。我不知道我在这里做错了什么。任何人都可以告诉我该怎么做?

public void callProc(String procName, Map paramMap) throws SQLException {
        Session session = null;
        Transaction tx = null;
        try {
            session = HibernateUtils.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            String dbURL = session.connection().getMetaData().getURL()
                    .toString();
            System.out.println("Conenction DB URL " + dbURL);
            tx.setTimeout(5);
            String[] keys = new String[paramMap.size()];
            keys = (String[]) paramMap.keySet().toArray(keys);

            Query query = session.getNamedQuery(procName);
             for (String key : keys) {
                query.setParameter(key, paramMap.get(key));
                System.out.println(query.getQueryString());
            }
            int result = query.executeUpdate();

            // List result = query.list();
            System.out.println(query.getQueryString());
            for (int i = 0; i < result; i++) {
                // logging the information.
                log.info(i);
            }
            tx.commit();
        } catch (RuntimeException exception) {
            exception.printStackTrace();
            try {
                tx.rollback();
            } catch (RuntimeException rbe) {
                log.error("Couldn’t roll back transaction", rbe);
                rbe.printStackTrace();
            }
            throw exception;
        } finally {
            if (session != null) {
                session.flush();
                session.close();
            }
        }
    }
}

堆栈追踪:

org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:198)
    at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1192)
    at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:357)
    at com.fedex.dao.GenericDaoImpl.callProc(GenericDaoImpl.java:44)
    at com.fedex.GenericStoredProc.main(GenericStoredProc.java:41)
Caused by: java.sql.SQLException: Missing IN or OUT parameter at index:: 3
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
    at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1728)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3364)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3453)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:189)
    ... 4 more

0 个答案:

没有答案