Получите данные пользовательского типа из Oracle, используя jdbc

1

У меня проблемы с получением моих данных на Java из Oracle DB. Вместо реального значения из базы данных возвращаются только 3 вопроса.

Сначала я создал свой тип следующим образом:

create or replace TYPE varchar2_ntt AS VARRAY(5000) OF varchar2(200);    

Затем я написал свой sql:

SELECT del.stop_name AS direction,
  del.departures
FROM
  (SELECT mvv.STOP_NAME,
    mvv.stop_id,
    CAST( COLLECT(SUBSTR(departure_time,1,5)
  ORDER BY departure_time) AS varchar2_ntt ) departures
  FROM stop_times st,
    MV_TRIP_V_SMER mvv,
    trips t
  LEFT JOIN calendar c
  ON c.service_id= t.service_id,
    routes r,
    mv_rezimi_za_postajni_vr pvr
  WHERE mvv.trip_id =st.trip_id
  AND st.trip_id    =t.TRIP_ID
  AND r.route_id    =t.route_id
  AND pvr.service_id=c.service_id
  AND pvr.workday=1
  AND st.stop_id    ='2206100000201'
  GROUP BY mvv.STOP_NAME,
    mvv.stop_id
  ) DEL

результат для отправки столбцов в sql-разработчике выглядит отлично.

SHEMA.VARCHAR2_NTT('13:15','16:25','18:15','19:45')

В Java я пытаюсь получить результаты:

while (rs.next()){
    ARRAY departures_a =((OracleResultSet)rs).getARRAY("departures");
    System.out.println ("Array is of type "+departures_a.getSQLTypeName());
    System.out.println ("Array is of length "+departures_a.length());
    String[] departures_arr = (String[]) departures_a.getArray();
    for (int n=0; n<departures_arr.length; n++){
         System.out.println("departure "+n+":"+ departures_arr[n]);
    }
}

Консольный выход:

Array is of type SHEMA.VARCHAR2_NTT
Array is of length 4
departure 0:???
departure 1:???
departure 2:???
departure 3:???

Что я делаю неправильно? Почему вместо реальных значений появляются вопросительные знаки?

Я нашел инструкции здесь и здесь.

  • 0
    Это работает для меня («чистый JDBC», нет классов Oracle): Array ar = rs.getArray("departures");String[] elements = (String[])ar.getArray();
  • 1
    У меня тоже работает с классами Oracle, используя ваш код; 11.2.0.3, ojdbc6.jar (и 5 и 7). Возможно, вы используете несовместимую версию драйвера? Какой тип данных время departure_time ?
Показать ещё 4 комментария
Теги:
jdbc

1 ответ

0

Может быть проблема с кодировкой. Попробуйте распечатать полученный результат.

System.out.printf("departure %d: %s%n", i, Arrays.toString(departures[i].getBytes()));

Распечатайте также typecode

System.out.println("Array element is of typecode " + departures_a.getBaseType());
  • 0
    я не думаю, что его проблема с кодировкой. Неважно, каков результат, я всегда получаю ??? (даже если строка имеет длину 100 символов). Я попробовал ваш код, вывод был "вылет 0: [?,?,?]" И так далее
  • 0
    Извините, я хотел получить байты.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню