Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    [Java] MySQL - Leggere N righe alla volta e ricominciare da N +1

    Ciao a tutti,

    Devo inserire i una JList un elenco di nomi. Questa dovrà mostrare tutti i nomi contenuti nel db. Visto che mi sembra eccessivo creare tutti gli oggetti e caricare il tutto subito nella JList (anche perchè potrebbero uscire molte righe), ho pensato di far si che vi sia un "limite" di 20 elementi alla volta.

    Io quindi dovrei iniziare dalla prima riga, leggere quindi le prime 20 ed inserirle nella lista. Successivamente, al click su un pulsante di "incremento" dovrò prendere le righe dalla 21 alla 40..e così via.
    Ho guardato l'api di ResultSet ed ho trovato absolute(int row)...dovrebbe fare al caso mio..

    Voi che mi consigliate? Come posso fare? è forse meglio riempire tutta la lista? (lo escluderei)

    Grazie a tutti! ^^

    EDIT:
    codice:
      private void inizializzaLista() {
        try {
    	  // svuoto la lista
    	  model.removeAllElements();
    	  stm = con.createStatement();
    	  rs = stm.executeQuery("SELECT * FROM Tabella");
    	  while((rs.absolute(guardati)) && (guardati % 5 != 0)) {
                int id = rs.getInt("id");
                // leggo tutti gli altri campi...
                // .............................
              }
    		
               model.addElement(newPaziente(PASSO_I_CAMPI));
    		guardati++;
    	  }
    	  rs.close();
    	} catch(Exception e) {JErrorDialog.manipolaErrore(e,true);}
      }
    guardati è una variabile intera che detiene appunto il conteggio (per una prova ho usato 5 elementi e non 20)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] MySQL - Leggere N righe alla volta e ricominciare da N +1

    Originariamente inviato da Patrick Jane
    Ho guardato l'api di ResultSet ed ho trovato absolute(int row)...dovrebbe fare al caso mio..
    Sì, ma il result set non deve essere di tipo TYPE_FORWARD_ONLY (il caso tipico/normale). Deve invece essere "scrollable", vedi in Connection i metodi che hanno il parametro int resultSetType.

    Originariamente inviato da Patrick Jane
    Voi che mi consigliate? Come posso fare? è forse meglio riempire tutta la lista? (lo escluderei)
    Dato che JList si basa su un ListModel, si potrebbe anche pensare di implementare un list model "furbo" (molto) che legge dal result set "on demand" quando serve. E magari con un sistema di "caching" che tiene al massimo N record in memoria.

    Dopotutto i result set "scrollable" sono stati originariamente pensati principalmente proprio per venire incontro alle esigenze delle interfacce utente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Grazie andbin!
    Ora smanetto un pò su come mostrare N elementi alla volta..evito di complicarmi la vita con il model :P

    Grazie ancora! ^^

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Oppure fai quello che si fa nel caso tipico del problema dell'impaginazione di risultati abbondanti in numero: n (quante ne servono) query usando la clausola LIMIT di mysql.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da Andrea1979
    Oppure fai quello che si fa nel caso tipico del problema dell'impaginazione di risultati abbondanti in numero: n (quante ne servono) query usando la clausola LIMIT di mysql.
    Uhm..non avevo pensato a questo, grazie!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.