Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема передачи структуры из Oracle в Java / 7 сообщений из 7, страница 1 из 1
22.04.2019, 06:59
    #39804613
SergeyAKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
Возникла такая вот проблема
Oracle 9i
Это создание типа объекта для передачи структуры
Код: plsql
1.
2.
3.
4.
5.
6.
7.
create or replace 
   type TOBJRESULT as 
        object (code varchar2(20)
              , message varchar2(4000)
              , num     integer
              , CONSTRUCTOR FUNCTION TOBJRESULT RETURN SELF AS RESULT              
              )




Это создание самого объекта со структурой

Код: plsql
1.
2.
3.
4.
5.
6.
7.
function getResult return TObjResult
is
o#result TObjResult; -- := TObjResult();
begin 
  o#result                := TObjResult('321', '123456', 344654);
 return o#result;
end;    



Это код в Java

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleTypes;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;



        OracleConnection conn = null;
        //Connection conn = null;
        
        CallableStatement stmt = null;

        
        
        try {
            
            conn = jdbcUtils.getConnection();
            
            StructDescriptor structDesc = StructDescriptor.createDescriptor("TOBJRESULT", conn);
            
            OracleCallableStatement cst = (OracleCallableStatement) conn.prepareCall(
                "{call ? := result.getResul}"
            );            
            
            //cst.setSTRUCT(1, struct);
            cst.registerOutParameter(1, OracleTypes.STRUCT, "TOBJRESULT");
            
            cst.execute();
            
            STRUCT struct = cst.getSTRUCT(1);
            
            Object[] rec = struct.getAttributes();
            
            
            for (int i = 0 ; i< rec.length; i++){
                logger.debug("i=%s, type=%s, value=%s", i, rec[i].getClass().getName(), rec[i] );
            }
            
            retCode     = (String)rec[0];
            retMessage  = Tools.fromBase((String)rec[1]);




        }catch(SQLException e){    
            retCode = Integer.toString(e.getErrorCode());
            retMessage = e.getMessage();
            throw e;
        } finally {
          if (stmt != null )   stmt.close();
          if (conn != null)    conn.close();
        }



Проблема в том, что возвращает эта структура.

Код: plaintext
1.
2.
3.
INFO  2019-04-22 08:49:52,946 -  i=0, type=java.lang.String, value=???
INFO  2019-04-22 08:49:52,946 -  i=1, type=java.lang.String, value=???
INFO  2019-04-22 08:49:52,946 -  i=2, type=java.math.BigDecimal, value=9876543210

Специально передавал цифры, чтобы не было претензий к кодировке.

Что я не так сделал?

И еще вопрос, как сделать так, чтобы можно было обращаться к атрибутам структуры по имени атрибута?

Спасибо.
...
Рейтинг: 0 / 0
22.04.2019, 07:10
    #39804617
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
SergeyAKaСпециально передавал цифрывыведенное джавой число достаточно специфичное, чтобы быть искажением чего-то другого.
...
Рейтинг: 0 / 0
22.04.2019, 07:51
    #39804628
SergeyAKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
Как оказалось, это проблема работы со структурой в вебсервисе.
Сервер Glassfish
используемые библиотеки
ojdbc6.jar
ojdbc6_g.jar


Сделал обычное явовское приложение, все возвращается как надо.
...
Рейтинг: 0 / 0
22.04.2019, 07:52
    #39804629
SergeyAKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
В итоге проблема решилась
Подложил рыбе еще и orai18n.jar и все заработало.
...
Рейтинг: 0 / 0
22.04.2019, 08:01
    #39804633
SergeyAKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
Остался один вопрос. Как обратиться к атрибуту из структуры по имени атрибута, а не по его индексу в массиве?
...
Рейтинг: 0 / 0
22.04.2019, 13:48
    #39804891
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
...
Рейтинг: 0 / 0
22.04.2019, 14:21
    #39804907
SergeyAKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи структуры из Oracle в Java
Leonid KudryavtsevJPublisher ?

https://docs.oracle.com/database/121/JJPUB/intro.htm#JJPUB24021

New Features in Oracle Database 12c Release 1(12.1.0.2) JPublisher



У нас Oracle 9i
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема передачи структуры из Oracle в Java / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]