Torna in homepage www.vincenzomanzoni.com
Homepage personale e blog di Vincenzo Manzoni
 
 FAQFAQ   CercaCerca   Cerca con GoogleCerca con Google   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati   Feed AtomFeed
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

[java] si puo' migliorare sto algoritmo?

 
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com
Precedente :: Successivo  
Autore Messaggio
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Mer Lug 21, 2004 10:34 am    Oggetto: [java] si puo' migliorare sto algoritmo? Rispondi citando

dunque 2 righe di spiegazione, io ho 2 elenchi, uno aggiornato che mi arriva da una lista grafica e uno vecchio da aggiornare che sta nel db.

io devo aggiornare la lista del db inserendo nel db solo i componenti della lista che ricevo dalla grafica che mancano e poi eventualmente eliminare i componenti extra che son presenti nel db ma che son stati rimossi dalla lista grafica.

ecco il mio algoritmo, si riesce per voi a rimpicciolire? io l'ho suddiviso in 2 parti:
la prima parte confronta un valore nel db e lo confronta con quelli della lista, la seconda parte invece confronta un valore della lista e fa scorrere per ogni valore della lista i valori del db. l'inverso della prima parte insomma.

Codice:

int[] alunni=studente.getSelectedIndices();
    query="SELECT * FROM lezionea WHERE lezione='"+this.id+"'";
    ResultSet rs=db.query(query);
    try{
      while (rs.next()) {
        int controllo=0;
        for (int i = 0; i < alunni.length; i++) {
          if(stud.get(alunni[i]).equals(rs.getString("studente"))){
            controllo=1;
          }
        }
        if(controllo==0){
          query="DELETE  FROM lezionea WHERE studente='"+rs.getString("studente")+"'";
          System.out.println(query);
          db.updatequery(query);
        }
      }
    query="SELECT * FROM lezionea WHERE lezione='"+this.id+"'";
    rs=db.query(query);
      for (int i = 0; i < alunni.length; i++) {
        int controllo=0;
        while(rs.next()){
          if(stud.get(alunni[i]).equals(rs.getString("studente"))){
            controllo=1;
          }
        }
        if(controllo==0){
          query="INSERT INTO lezionea VALUES ('"+this.id+"','"+stud.get(alunni[i])+"','0')";
          System.out.println(query);
          db.updatequery(query);
        }
        rs.isFirst();
      }
    OK.setVisible(true);
    ERRORE.setVisible(false);
    }catch(Exception ex){
      ERRORE.setVisible(true);
      OK.setVisible(false);
    }
Top
Profilo Invia messaggio privato HomePage
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mer Lug 21, 2004 11:14 am    Oggetto: Rispondi citando

Secondo me fai prima a cancellare tutti quelli vecchi ed aggiungere quelli nuovi.

Praticamente una DELETE FROM seguita da una INSERT INTO.
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Mer Lug 21, 2004 11:20 am    Oggetto: Rispondi citando

ipotesi valida, unico problema che nel db ci sono alcuni valori nello stesso record che se vanno cancellati andrebbero ripristinati pari pari, quindi uscirebbe un bel casino

il db è una cosa simile:
|id_lezione|id_studente|stato|


id_lezione è costante e non ho poblemi, id_studente sarebbe il contenuto delle liste e stato sarebbero i valori di quello studente per quella determinata lezione. (stato indica pagato/non pagato)

se elimino tutto mi perdo lo stato e memorizzarsi eventualmente lo stato in qualche array diventerebbe piu' un casino che altro
Top
Profilo Invia messaggio privato HomePage
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mer Lug 21, 2004 11:30 am    Oggetto: Rispondi citando

1) Recuperi i dati dal db e popoli la maschera
2) L'utente effettua le modifiche necessarie
3) Preme il pulsante aggiorna, che cancella tutte le informazioni vecchie e inserisce quelle nuove.

Secondo me c'è un pattern (o una metodologia) per risolvere in maniera "standard" questo problema: prova a guardare come fa phpMyAdmin, hai presente quando inserisci un nuovo record o un nuovo campo in una tabella? Rolling Eyes
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Mer Lug 21, 2004 2:54 pm    Oggetto: Rispondi citando

si... k, eliminare e poi reinserire tutto sarebbe la cosa migliore, ma io non ho lo status e non mi serve caricarlo, anche perchè mi darebbe solo fastidio e mi incasinerebbe le cose quando dovrei andare a reinserire il tutto, andando a verificare lo status come era.

a me interessa sapere se come ho strutturato io l'algoritmo, qiuindi facendo scorrere una lista per ogni elemento della seconda lista e viceversa è per forza così o si puo' ottimizzare un po la cosa.
Top
Profilo Invia messaggio privato HomePage
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Gio Lug 22, 2004 1:18 pm    Oggetto: Rispondi citando

abaddon ha scritto:
a me interessa sapere se come ho strutturato io l'algoritmo, qiuindi facendo scorrere una lista per ogni elemento della seconda lista e viceversa è per forza così o si puo' ottimizzare un po la cosa.

Per essere corretto lo è! Hai problemi di prestazioni?
Altrimenti intanto lascialo così e concentrati su un altro.

Il tempo è denaro. Cit.
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Gio Lug 22, 2004 8:45 pm    Oggetto: Rispondi citando

ma infatti son già passato avanti, l'avevo affidata a voi l'ottimizzazione Very Happy
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com Tutti i fusi orari sono GMT 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it