У меня проблемы с получением моих данных на 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:???
Что я делаю неправильно? Почему вместо реальных значений появляются вопросительные знаки?
Может быть проблема с кодировкой. Попробуйте распечатать полученный результат.
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());
Array ar = rs.getArray("departures");String[] elements = (String[])ar.getArray();
departure_time
?