Попадание в хранимый процесс — javax.ejb.EJBException

#java #sql #stored-procedures #jdbc #ejb

#java #sql #хранимые процедуры #jdbc #ejb

Вопрос:

Я пытаюсь попасть в хранимую процедуру, но получаю это сообщение об ошибке: «javax.ejb.EJBException»… Я никогда не работал с хранимыми процедурами, поэтому исключение для меня немного греческое.

Кто-нибудь, кто мог бы пролить некоторый свет на это? Ниже я вставил код, который я написал:

 @WebMethod(operationName = "getSpecimenResultsXml")
public String getSpecimenResultsXml(@WebParam(name = "specimenGuid") String specimenGuid, @WebParam(name = "publicationGuid") String publicationGuid, @WebParam(name = "forProvider") String forProvider) {

    //Method variables
    ResultSet rs = null;
    String xml = null;

    // 1) get server connection
    Connection conn = dataBaseConnection.getConnection();

    // 2) Pass recieved parameters to stored proc.
    try {
        CallableStatement proc =
                conn.prepareCall("{ call getSpecimenReportXml(?, ?, ?) }");
        proc.setString(1, specimenGuid);
        proc.setString(2, publicationGuid);
        proc.setString(3, forProvider);
        proc.execute();

        rs = proc.getResultSet();

    } catch (SQLException e) {
        System.out.println("--------------Error in getSpecimenResultsXml------------");
        System.out.println("Cannot call stored proc: "   e);
        System.out.println("--------------------------------------------------------");
    }

    // 3) Get String from result set
    try {
        xml = rs.getString(1);
    } catch (SQLException e) {
        System.out.println("--------------Error in getSpecimenResultsXml------------");
        System.out.println("Cannot retrieve result set: "   e);
        System.out.println("--------------------------------------------------------");
    }

    // 4) close connection
    try {
        conn.close();
    } catch (Exception e) {
        System.out.println("--------------Error in getSpecimenResultsXml------------");
        System.out.println("Cannot close connection: "   e);
        System.out.println("--------------------------------------------------------");
    }

    // 5) return the returned String
    return xml;
}
  

О, и хранимая процедура, которую мы назвали getSpecimenReportXml

Комментарии:

1. Исключение для нас тоже загадка, поскольку мы его не видим. Тьфу; эти комментарии — шум, и, пожалуйста, используйте ведение журнала вместо S.o.p.s.

2. По-видимому, это было вызвано NullPointerException . Но опять же, я не знаю, где это могло произойти. Если вы хотите полное исключение, я мог бы опубликовать его? Но это довольно много строк. Что касается комментариев, то они там не останутся, они просто пока есть, чтобы помочь мне отслеживать. Когда я внесу свои изменения в наши резюме, я их удалю… Но это не главное…

3. Никто не может помочь, не увидев фактической ошибки.

4. (Хотя я скажу это; ваш код просто продвигается вперед, если есть исключение, что делает обработку исключений, возможно, информативной, но в конечном итоге нефункциональной.)

5. Исключение и определение хранимой процедуры будут полезны.

Ответ №1:

В вашем исключении где-то будет указано «вызвано», что является большой подсказкой. Если это NPE, вам может потребоваться проверить значения dataBaseConnection и conn убедиться, что они установлены. Для этого используйте отладчик, но исключение должно точно указать, какая строка вызвала проблему.