2011-08-26 5 views
0

serialclob을 문자열로 변환하려고합니다. 그러나 나는 성공하지 못했습니다. 나는 내가 올바른 방식으로하지 않는다고 생각한다.serialClob을 String 형식으로 변환하는 방법은 무엇입니까?

char[] buffer; 
     int count = 0; 
     int length = 0; 
     String data = null; 
     String[] type; 
     StringBuffer sb; 
     try{ 
      SqlRowSet rows = getJdbcTemplate().queryForRowSet("select c.BOUNDING_BOX.GET_WKT() BOUNDING_BOX FROM EXAMPLE c WHERE EXAMPLE_ID = 100", 
        new Object[] {subid}); 
      SubscriptionModel subscription = new SubscriptionModel(); 
      System.out.println("bbox"); 
      SqlRowSetMetaData rsmd = rows.getMetaData(); 
       type = new String[rsmd.getColumnCount()]; 
       for(int col=0;col<rsmd.getColumnCount();col++) 
        type[col] = rsmd.getColumnTypeName(col + 1); 
       System.out.println("Read rows and only serial clob data type values"); 
      while(rows.next()){ 
       System.out.println("test 1 here"); 
       for(int col=0;col<rsmd.getColumnCount();col++){ 
        System.out.println("test 2 here"); 
        if("CLOB".equals(type[col]){ 
         System.out.println("test 3 here"); 
         SerialClob clob = (SerialClob) ((ResultSet) rows).getClob(col + 1); 
         if(clob != null){ 
          System.out.println("clob is not null"); 
          Reader is = clob.getCharacterStream(); 

          sb = new StringBuffer(); 
          length = (int) clob.length(); 

          if(length>0){ 
           buffer = new char[length]; 
           count = 0; 
           try{ 
            while((count = is.read(buffer)) != -1) 
             sb.append(buffer); 

            data = new String(sb); 
           }catch(Exception e){ 

           } 
          } 
          else 
           data = (String) null; 
         }else 
          data = (String) null; 
        }else{ 
         data = (String) rows.getObject(col + 1); 
        } 
       } 
      } 
      return subscription; 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

하지만 같은 오류가 점점 오전 : 내 코드는 내 실수는 어디

bbox 
Read rows and only serial clob data type values 
test 1 here 
test 2 here 
java.lang.ClassCastException: javax.sql.rowset.serial.SerialClob cannot be cast to java.lang.String 

입니까? 직접 문자열 참조를 비교하는 것

if(type[col] == "CLOB") 

:

답변

2

음이 적어도 하나의 문제입니다. 나는이 더 잘 작동합니다 의심 :

if ("CLOB".equals(type[col])) 

오른쪽 if 블록으로 얻을 것이다. 나머지 코드에서는 자세히 살펴 보지 않았습니다. 작은 메서드로 분해 할 수 있다면 읽고 유지하는 것이 더 간단 할 것입니다.

+0

감사는 이제 또 다른 오류가 같이 표시되어하건를 도왔다. lang.ClassCastException : org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet을 java.sql.ResultSet에 캐스트 할 수 없습니다. – Unknown

+0

@Kiran : 코드에 캐스트가 많이 있습니다. 그것은 일반적으로 코드 냄새입니다. 이제 우리는 Spring SqlRowSet을 사용하고 있음을 볼 수 있었고, 단지'getString'을 사용할 수 있다고 생각합니다. 최소한 시도해 볼만한 가치가 있습니다. –

+0

@Kiran : "serialclob로 값을 가져 오는 중"이라는 것은 무엇을 의미합니까? 솔직히 말해서, 자바를 처음 사용하는 사람이라면 JDBC를 사용하지 말고 먼저 언어와 핵심 플랫폼에 익숙해지고 JDBC와 같은 것들로 이동하십시오. 그렇지 않으면 문제가 API와 관련이 있는지 (또는 * 될지도 모름) 또는 일반적인 자바 경험 부족으로 인해 (첫 번째 문제가 있었는지) 알지 못하는 채로 시도 할 수 있습니다. –

1

문제는 여기 가능성이 높습니다 -

if(type[col] == "CLOB"){ // <-- This does Object equality 

를 사용하여 문자열 # 문자열 비교를 수행하는() 메소드와 같습니다. BBOX 읽기 행을 만 시리얼 CLOB 데이터 유형 여기 여기 여기 자바를 시험 3 시험 2 테스트 한 값 : 당신이 빠른 reply.It에 대한

if ("CLOB".equals(type[col])) { 
+0

빠른 답장을 보내 주셔서 감사합니다.하지만 이제는 다른 오류가 표시됩니다 : org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet을 java.sql.ResultSet에 캐스팅 할 수 없습니다. – Unknown

+0

Spring의'SqlRowSet' java.sql.ResultSet을 확장하지 않습니다. 따라서 코드에서 수행하는 것처럼 캐스트를 수행 할 수 없습니다. 그 대신에'ResultSetWrappingSqlRowSet'으로받은 다음'rows.getResultSet()'을 실행하여 java.sql.ResultSet에 대한 핸들을 얻으십시오 – Kal

관련 문제