2015-01-28 3 views
1

Oracle 데이터베이스에서 Java로 데이터를 가져 오는 데 문제가 있습니다. 실제 값 대신 데이터베이스에서 3 개의 물음표 만 반환됩니다. 다음과 같이 jdbc를 사용하여 Oracle에서 사용자 정의 형식 데이터 가져 오기

먼저 나는 내 타입을 만든 : 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 

결과가 잘 보이는 :

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

는 그럼 난 내 SQL을 썼다.

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]); 
    } 
} 

콘솔 출력 : 결과를 얻으려고 노력 자바 메신저에서

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

잘못하고 무엇 메신저
Array is of type SHEMA.VARCHAR2_NTT 
Array is of length 4 
departure 0:??? 
departure 1:??? 
departure 2:??? 
departure 3:??? 

? 왜 실제 값 대신에 물음표가 있습니까?

지침을 찾았습니다. herehere입니다.

+0

("순수 JDBC", 아니 오라클 클래스) = rs.getArray AR'배열 ("출발"); 문자열 [] 요소 = (String []) ar.getArray();' –

+1

코드를 사용하여 Oracle 클래스에서도 작동합니다. 11.2.0.3, ojdbc6.jar (및 5와 7). 아마도 호환되지 않는 드라이버 버전을 사용하고 있습니까? 'departure_time '은 어떤 데이터 타입입니까? –

+0

예 순수 JDBC에서 작동하지만 두 가지를 모두 시도했지만 차이점은 없습니다. – bakus33

답변

0

문자 세트 문제 일 수 있습니다. 받은 결과를 인쇄하십시오. 또한

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

를 인쇄이 나를 위해 작동 타입 코드

System.out.println("Array element is of typecode " + departures_a.getBaseType()); 
+0

나는 charset 문제를 생각하지 않는다. 결과가 무엇이든간에, 나는 항상 얻는다 ??? (문자열이 100 자 길이 인 경우에도). 당신의 코드를 시도한 결과, "departure 0 : [?,?,?]"등등 – bakus33

+0

미안 해요. – SubOptimal

+0

이것은 charset 문제 일 수 있습니다. 나는 Advanced queuing을 사용할 때 비슷한 것을 생각해 낸다. 해결책은 ojdbc7.jar를 제외하고 하나 이상의 .jar 파일을 클래스 경로에 추가하는 것이 었습니다. 이 라이브러리는 문자 집합 변환과 관련이 있습니다. – ibre5041

관련 문제