2013-11-25 52 views
0

我正在爲使用Java 1.7 + GAE的客戶之一開發應用程序,並使用Google雲端SQL和數據庫。試圖從大型數據集中獲取數據

我想從一個巨大的結果集中獲取數據,但唯一我得到它的可怕的超時。

到目前爲止,代碼我有如下:

public List <String> leerMasivo(String cadena, String [] valores) throws SQLException{ 
    log.info("Entra en la función leer(String cadena, String [] valores)"); 
    this.conectar(); 
    long nRowsNumber = 1; 
    long nId = 0; 
    List <String> listaDatos = new ArrayList <String>(); 
    try{ 
     while (nRowsNumber > 0) { 
      nRowsNumber = 0;  
    PreparedStatement stmt = con.prepareStatement(cadena, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
    stmt.setMaxRows(10); 

    System.out.println("Número de filas maximo "+stmt.getMaxRows());   
    if(valores != null){ 
     for(int i=0; i< valores.length;i++){ 
      stmt.setString(i+1,valores[i]); 
     } 
    } 
    ResultSet rs = stmt.executeQuery(); 
    ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData(); 
    int numeroColumnas= rsmd.getColumnCount(); 

    while (rs.next()){ 
     ++nRowsNumber; 
     nId = rs.getLong(1); 
     if (numeroColumnas >1){ 
      String fila =""; 
      for (int i=1;i<=numeroColumnas;i++){ 
        fila=fila + "::" + rs.getString(i); 
      } 
      fila=fila+"%%"; 
      listaDatos.add(fila); 
     }else{ 
      listaDatos.add(rs.getString(1)); 
      } 
     } 
    } 
    log.info("Los valores leidos son: " + listaDatos.toString()); 
    }catch(Exception e){ 
     log.info("Ha ocurrido un error"); 
     log.info("el error es " + e.getMessage().toString()); 
     con.close(); 
     e.printStackTrace(); 
    }finally{ 
     this.cerrarConexion(); 
    } 
    log.info("Sale de la función leer(String cadena, String [] valores)"); 

    return listaDatos; 

} 

我需要,如果你有時間,告訴我什麼是左邊,這樣我就可以得到我需要沒有得到超時錯誤的數據。現在我對我可能錯過的東西毫無頭緒。

謝謝您的時間,

親切的問候,

+0

請定義「巨大」。 –

+0

超過8000行因爲有兩個連接的選擇查詢而對我來說是巨大的。 – Catersa

回答