Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,929

    [Java-Jsp] Query a db dentro un for

    ho questo codice fatto un po' alla carlona, ma non so come trovare il numero delle righe trovate, mi serve sapere perchè non mi esegue la seconda query:
    codice:
    ResultSet rs_risorse=sql.executeQuery("SELECT consuntivo.id_risorsa, risorse.nome_risorsa FROM consuntivo LEFT JOIN risorse on risorse.id_risorsa=consuntivo.id_risorsa GROUP BY id_risorsa");
    // Move to the end of the result set
     rs_risorse.last();
    // Get the row number of the last row which is also the row count
    int trovati = rs_risorse.getRow();
    out.println("righe"+trovati);
    		rs_risorse.beforeFirst();
    		
    for (int a=0;a<trovati;a++)	{
    	rs_risorse.next();
    	int id_risorsa=rs_risorse.getInt("id_risorsa");
    	nome_risorsa=rs_risorse.getString("nome_risorsa");
    	riga_settimana=riga_settimana+"<th>"+nome_risorsa+"</th>";
    	//DEBUG
    	out.println("id_risorsa="+id_risorsa);
    	out.println("
     "+nome_risorsa+"
    ");
    for(int i=1;i<53;i++)	{
    query_consuntivo="SELECT * FROM consuntivo WHERE id_commessa='1' AND id_risorsa="+id_risorsa+" AND settimana_consuntivo="+i;
    //debug
    //out.println("
    "+query_consuntivo);
    if (i==52) riga_tabella=riga_tabella+"<td>"+i+"</td><td>Totali</td></tr>";
    else riga_tabella=riga_tabella+"<td>"+i+"</td>";
    ResultSet rs_consuntivo=sql.executeQuery(query_consuntivo);
    while(rs_consuntivo.next())	{
    					giorni_consuntivo=rs_consuntivo.getInt("giorni_consuntivo");
    					//if (i==1)	riga_consuntivo=riga_consuntivo+"<tr>";
    					riga_consuntivo=riga_tabella+"<td>"+giorni_consuntivo+"</td>";
    }
    	}
    }
    spero sia chiaro

  2. #2
    Perchè vuoi proprio contare le righe prima di eseguire la seconda query?
    Potresti iterare sul primo rs e contemporaneamente eseguire le altre query.

    codice:
    ResultSet rs_risorse=sql.executeQuery("SELECT consuntivo.id_risorsa, risorse.nome_risorsa FROM consuntivo LEFT JOIN risorse on risorse.id_risorsa=consuntivo.id_risorsa GROUP BY id_risorsa");
    		
    while(rs.next()){
      int id_risorsa=rs_risorse.getInt("id_risorsa");
      nome_risorsa=rs_risorse.getString("nome_risorsa");
      riga_settimana=riga_settimana+"<th>"+nome_risorsa+"</th>";
      //DEBUG
      out.println("id_risorsa="+id_risorsa);
      out.println("
     "+nome_risorsa+"
    ");
      for(int i=1;i<53;i++)	{
        query_consuntivo="SELECT * FROM consuntivo WHERE id_commessa='1' AND id_risorsa="+id_risorsa+" AND settimana_consuntivo="+i;
        //debug
        //out.println("
    "+query_consuntivo);
        if (i==52){
          riga_tabella=riga_tabella+"<td>"+i+"</td><td>Totali</td></tr>";
        }else {
          riga_tabella=riga_tabella+"<td>"+i+"</td>";
        }
        ResultSet rs_consuntivo=sql.executeQuery(query_consuntivo);
        while(rs_consuntivo.next())	{
    	giorni_consuntivo=rs_consuntivo.getInt("giorni_consuntivo");
    	riga_consuntivo=riga_consuntivo+"<tr>";
    					riga_consuntivo=riga_tabella+"<td>"+giorni_consuntivo+"</td>";
        }
      }
    }
    Non ho provato il codice ma secondo me risolve il tuo problema.
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  3. #3
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,929
    si incarta sempre lo stesso, ovvero esegue solo il primo ciclo, per il primo id_risorsa che trova, gli altri due (sono tre in tutto) non se li looppa mai

  4. #4
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,929
    Poi il numero delle righe trovate mi serve successivamente quindi tanto vale fare una query una volta sola, visto i problemi che saltano fuori gia con due query in un ciclo...

  5. #5
    Hai controllato che non ti dia errori di connessione al db?

    Dovresti aver messo tutto in un blocco try{}catch(Exception e){} ... giusto?

    Il mio consiglio è di fare un e.printStackTrace() nel blocco di istruzioni del catch.
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.