2014-06-10 4 views
0

저장 프로 시저 클라이언트를 참조 할 때 두 개의 ResultSet을 가져옵니다. 모든 첫 번째는 잘하지만, 두 번째는 20 행으로 구성으로, 클라이언트 개발자는 절차에 대한 1000왜 Resultset가 다듬어 졌습니까?

Connect connectObject = new Connect(); 
Connection connectionToPool = null; 
CallableStatement procedure = null; 
ResultSet table = null; 
int rowCounter; 
SOATO answer = new SOATO(); 
int counter = 1; 

try { 
    connectObject.init(POOL); 
    connectionToPool = connectObject.getConnection(); 

    procedure = connectionToPool.prepareCall("{call procedure()}"); 
    procedure.execute(); 

    while (true) { 
     rowCounter = procedure.getUpdateCount(); 

     if (rowCounter > 0) {    // This is update counter 
      procedure.getMoreResults(); 
      continue; 
     } 

     if (rowCounter == 0) { // DDL command or 0 updates 
      procedure.getMoreResults(); 
      continue; 
     } 

     table = procedure.getResultSet();  // If we reached here, we have a  
              // set of data, or no more results 
     if (table != null) { 
      switch (counter) { 
       case 1:     // Area tables 
        answer.areaDataHandler(table); 
        counter++; 
        break; 

       case 2:    // Region tables 
        answer.regionDataHandler(table); 
        counter++; 
        break; 

       default: 
        break; 
      } 
      procedure.getMoreResults(); 
      continue; 
     } 
     break;        // No more results 
    } 
    } catch (SQLException e) { 
     e.toString(); 
    } finally { 
     if (table != null) { 
      try { 
       table.close(); 
      } catch (SQLException e) { 
       e.toString(); 
      } 
     } 
     if (procedure != null) { 
      try { 
       procedure.close(); 
      } catch (SQLException e) { 
       e.toString(); 
      } 
     } 
     if (connectionToPool != null) { 
      connectObject.releaseConnection(connectionToPool); 
     } 
    } 
    return answer; 
} 

regionDataHandler()와 유사 areaDataHandler()

public void areaDataHandler(ResultSet table) throws SQLException { 

    while (table.next()) { 
     Area temp = new Area(); 
     temp.setKodobl(table.getInt("kodobl")); 
     temp.setNameobl(table.getString("nameobl")); 
     area.add(temp); 
    } 
} 
  • 데이터베이스를 반환 주장 - MSSQL 2000
  • JDBC 드라이버 - jtds1.2.5

PS 엄격하게 중학교 및 나쁜 영어에 대한 미안을 판단하지 마십시오

+0

클라이언트 개발자가 "청구 한 항목"을 확인하기 위해 수동으로 sql을 실행 했습니까? – jtahlborn

+0

Eclipse 또는 다른 IDE를 사용하지 않고 SPROC를 호출 할 때 어떤 일이 발생하는지 디버깅하는 것이 어떻습니까? 여기에 SPROC를 표시하지 않으므로 도움이되지 않습니다. 나는 이것을 디버깅하는 것이 좋습니다, 이것은 당신을 도울 수 있습니다. –

+1

그들은이 시스템에 더 관심이 있기 때문에 믿지 못할 이유가 없습니다. IDE에서만 디버깅 할 수 없거나 서버에서 SPROC가있는 데이터베이스에 연결할 수 없기 때문에 디버깅 할 수 없습니다. – Nekto

답변

0

문제가 해결되면 정수 오버 플로우 필드가 발생합니다. 추가 로깅 및 예외 처리를 통해 문제가 발견되었습니다. 내 코드에서 예외가 확인되지 않았습니다. 프로젝트에서 예외를 올바르게 처리 할 때 사람들이 그렇게 바보 같지는 않습니다.