2014-06-10 80 views
0

當引用存儲過程時,客戶端獲取兩個Resultset。與第一一切都很好,但第二由20行,客戶端開發要求該過程返回約1000爲什麼要裁剪結果集?

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

問題解決了,原來是int溢出字段。 通過額外的日誌記錄和異常處理髮現的問題。 在我的代碼中沒有檢查異常。 所以人們不會那麼愚蠢,因爲我正確地處理您的項目中的異常