Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CallableStatement, работа с хранимыми процедурами  
:(
    Опции темы
Bandit
Дата 1.3.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 27.11.2007
Где: Минск

Репутация: нет
Всего: нет



Доброго времени суток.
Есть таблица(БД Oracle 10g Express Edition):
Код

CREATE TABLE Users 
(
    id_user NUMBER(5) NOT NULL PRIMARY KEY,
    nickname VARCHAR2(30),
  password VARCHAR2(30),
    e_mail VARCHAR2(30),
  birthday DATE,
  bank NUMBER
);


Есть функция:
Код


create or replace
PACKAGE myTypes
AS
    TYPE ref_cursor IS REF CURSOR;
END;

CREATE OR REPLACE FUNCTION FUNC_GET_ALL_USERS RETURN myTypes.ref_cursor 
AS
  user_cursor myTypes.ref_cursor;
BEGIN
  OPEN user_cursor FOR
      SELECT * FROM USERS;
  RETURN user_cursor;
END;



Код

Connection connect = null;
        CallableStatement callableStatement = null;
        try{
            connect = connectionPool.getConnection();
            try{
                
                //begin ? := FUNC_GET_ALL_USERS(); end;
                //{CALL ? := FUNC_GET_ALL_USERS()}
                
                callableStatement = connect.prepareCall("{CALL ? := FUNC_GET_ALL_USERS()}");
                callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
                callableStatement.execute();//---------------------------------ошибка вылетает при выполнении
                ResultSet rs = callableStatement.getResultSet();
                while(rs.next()){
                    System.out.println(rs.getString("nickname"));
                }
            }finally{
                connect.close();
            }
        }catch(SQLException e){
            System.out.println(e);
        }


java.sql.SQLException: Нарушение протокола

В чем может быть проблема? Кто-нибудь сталкивался? Или я что-то не так делаю? 

PM MAIL   Вверх
_sten_
Дата 1.3.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 29.9.2006

Репутация: 3
Всего: 3



Попробуй так:
callableStatement = connect.prepareCall("{?=call FUNC_GET_ALL_USERS()}");

если функция в пакете то перед ее именем надо указать имя пакета, то есть:

callableStatement = connect.prepareCall("{?=call mypackage.FUNC_GET_ALL_USERS()}");
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
Bandit
Дата 1.3.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 27.11.2007
Где: Минск

Репутация: нет
Всего: нет



_sten_,  спасибо за внимание к моей проблеме... но у меня функция не в пакте... в пакете я объявил свой новый тип:TYPE ref_cursor IS REF CURSOR;
который использую далее... в том числе и в свой функции... но все-равно спасибо smile

просто банально не могу понять что это за ошибка: java.sql.SQLException: Нарушение протокола... и чем она вызвана... :(

StackTrace ошибки

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.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:133)
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:385)
    at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:1036)
    at by.bsuir.db.jdbs.JDBCUserDAO.getAllUsers(JDBCUserDAO.java:40)
    at by.bsuir.jsf.manager.ManagerJsfBean.login(ManagerJsfBean.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.el.parser.AstValue.invoke(Unknown Source)

Это сообщение отредактировал(а) Bandit - 1.3.2009, 15:31
PM MAIL   Вверх
_sten_
Дата 1.3.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 29.9.2006

Репутация: 3
Всего: 3



ошибка либо сдесь 
callableStatement = connect.prepareCall("{CALL ? := FUNC_GET_ALL_USERS()}");
либо на стороне оракла

кста не {CALL ? := FUNC_GET_ALL_USERS()} а {?=call FUNC_GET_ALL_USERS()}

Это сообщение отредактировал(а) _sten_ - 1.3.2009, 15:40
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
Bandit
Дата 1.3.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 27.11.2007
Где: Минск

Репутация: нет
Всего: нет



_sten_, кста не {CALL ? := FUNC_GET_ALL_USERS()} а {?=call FUNC_GET_ALL_USERS()}


 http://www.enterprisedt.com/publications/o...result_set.html   ...   делаю все в соответствии только не передаю параметр в функцию.

Это сообщение отредактировал(а) Bandit - 1.3.2009, 15:56
PM MAIL   Вверх
_sten_
Дата 1.3.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 29.9.2006

Репутация: 3
Всего: 3



вот всегда делал так:
Код

 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection connect = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "test", "test");
        try {

            CallableStatement st = connect.prepareCall("{?=call FUNC_GET_ALL_USERS()}");
            st.registerOutParameter(1, OracleTypes.CURSOR);
            st.execute();
            ResultSet rs = (ResultSet) st.getObject(1);
            while (rs.next()) {
                System.out.println(rs.getString(0));
            }
        } finally {
            connect.close();
        }



проверил работает
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
Bandit
Дата 1.3.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 27.11.2007
Где: Минск

Репутация: нет
Всего: нет



взял твой код... та же проблема... без изменений... 

Код

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.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:133)
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:385)
    at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:1036)
    at by.bsuir.db.jdbs.JDBCUserDAO.getAllUsers(JDBCUserDAO.java:61)
    at by.bsuir.jsf.manager.ManagerJsfBean.login(ManagerJsfBean.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.el.parser.AstValue.invoke(Unknown Source)
    at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
    at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
    at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:69)
    at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
    at javax.faces.component.UICommand.broadcast(UICommand.java:141)
    at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:115)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:191)
    at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:105)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:80)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:143)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)



_sten_,  спасибо огромное в любом случае... если есть идеи в чем может быть проблема, то готов выслушать smile))
PM MAIL   Вверх
_sten_
Дата 1.3.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 29.9.2006

Репутация: 3
Всего: 3



может  хранимка либо пакет не откомпилен?
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
mbasil
Дата 4.3.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Попробуйте так:
Код

ResultSet rs = ((OracleCallableStatement)callableStatement).getCursor(1);


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.