Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    32

    Dubbi sulla classe java.Util.Vector

    Qualcuno può schiarirmi le idee:
    mi chiedevo che differenza c'è tra un array di stringhe ed un Vector di stringhe...
    leggendo in giro mi sembra che la differenza sostanziale è che nei vector possiamo cambiare dinamicamente la dimensione del vettore stesso, ma la struttura dei due elementi dovrebbe essere la stessa, però utilizzando questo codice mi vengono dei dubbi:


    codice:
    Statement stmt = conn.createStatement();    
    ResultSet rs = stmt.executeQuery(query);   
    v = new Vector();
    ResultSetMetaData rsmd = rs.getMetaData();
    colonne = rsmd.getColumnCount();  
    
    while(rs.next()) // Creo il vettore risultato scorrendo tutto il ResultSet
    {   
        records = new String[colonne];
        for (int i=0; i<colonne; i++)
           records[i] = rs.getString(i+1);
        v.add( (String[]) records.clone() );
    }

    è come se il vector fosse un array di puntatori ad array di stringhe.
    infatti in v[0] abbiamo i valori della prima riga della tabella studente, in v[1] i valori della seconda riga e così via...
    Quindi un Vector oltre a poter essere un array di int, stringhe ecc può anche avere questo tipo di struttura?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prima di tutto non è Vector, ma è Vector<E>, poichè fa uso dei tipi generici (Generics).

    Un array di stringhe funziona allo stesso modo di un array di interi, la differenza è che vi sono contenute delle Stringhe. Ha una dimensione fissata, e non può cambiare durante l'esecuzione del programma (sempre se non crei un array con una dimensione in più, copi gli elementi del primo nel secondo, e riassegni il secondo al primo).

    Un Vector invece funziona come un ArrayList. La differenza è che Vector è sincronizzato, al contrario di ArrayList.
    Vector pertanto è un "array dinamico", è una lista. Il tuo codice non ha moltissimo senso... è scritto male.

    Basandomi sul tuo esempio:

    codice:
    Statement stmt = conn.createStatement();    
    ResultSet rs = stmt.executeQuery(query); 
      
    Vector<String> v = new Vector<String>();
    
    ResultSetMetaData rsmd = rs.getMetaData();
    colonne = rsmd.getColumnCount();  
    
    while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet   
        v.add(rs.getString(i+1));
    }
    In questo modo riempi il Vector con delle String.

    Non capisco quindi il senso del tuo codice precedente...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    32
    Si con il codice che hai postato abbiamo un array di stringhe, ma se supponi che la query seleziona 3 campi di una tabella studente, il tuo vettore sarebbe di questo tipo:
    v[0] = 85500
    v[1] = rossi
    v[2] = mario
    v[3] = 85501
    v[4] = Bianchi
    v[5] = antonio

    ed è un pò più ostico da trattare, nel mio caso invece posso facilmente trattare il risultato, ad esempio:
    codice:
    for(int i=0; i<v.size();i++){ 
       String [] record = (String []) v.get(i); 
       model.addRow(new Object[] {record[0],record[1],record[2]}); 
    }
    in quanto sono organizzati in questo modo:
    v[0] = [85500] [rossi] [mario]
    v[1] = [85501] [bianchi] [antonio]

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Bhe, a questo punto potresti effettuare le 3 letture e creare un oggetto che rappresenti i dati.

    codice:
    class Utente {
      private String nome, cognome,matricola;
      
      Utente(String nome, String cognome, String matricola) {
        this.nome = nome;
        this.cognome = cognome;
        this.matricola = matricola;
      }
    
      String getNome() {
        return nome;
      }
      // altri getter e setter
      // .....
    }
    codice:
    Statement stmt = conn.createStatement();    
    ResultSet rs = stmt.executeQuery(query); 
      
    Vector<Utente> v = new Vector<Utente>();
    
    ResultSetMetaData rsmd = rs.getMetaData();
    colonne = rsmd.getColumnCount();  
    
    while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet   
        String n = rs.getString("Nome"); // Ottengo il valore della colonna
        String c = rs.getString("Cognome");
        String m = rs.getString("Matricola");
    
        v.add(new Utente(n,c,m));
        
    }
    Essendo OOP ha molto più senso creare un oggetto che rappresenti i tuoi dati.

    Oppure sei costretto per qualche particolare ragione ad utilizzare il tuo metodo?

    Da trattare risulterebbe comunque semplice anche nel mio precedente modo, dovresti solo utilizzare un controllo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    32
    No non ci sono motivazioni particolari, l'ho visto utilizzare e mi è piaciuto, in quanto, a mio avviso è molto pratico, visto il tipo di organizzazione del risultato.

    L'unico dubbio che ho è: come è possibile che Vector assumi quel tipo di forma? cioè è normale?
    io avevo capito che potesse assumere solo i tipi int, long, string ecc

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Io posso dirti che Vector non riceve come parametro un array, quindi non può funzionare.

    Non capisco perchè non creare un tuo tipo di dato che rappresenta i dati... si tratta di OOP!

    Per rispondere alla tua domanda, Vector come le altre Collection (comprese quelle definire dall'utente), riceve solo oggetti. Quindi non int, long... ma Integer, Long, Double, ed ovviamente String.

    PS: Ovviamente anche Float e le altre classi Wrapper.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    32
    Posso confermarti che funziona, ho fatto diverse prove.

    Per quanto riguarda la creazione di un mio tipo, nel mio caso non andrebbe bene, perchè ho tantissime altre query che coinvolgono vari attributi di varie tabelle... si tratterebbe di fare tanti tipi quanti sono i tipi di query.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Comunque utilizzando Java l'approccio OOP sarebbe d'obbligo.

    Che codice hai utilizzato per fare le prove?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Patrick Jane
    Che codice hai utilizzato per fare le prove?
    Credo si riferisca alla mia vecchia pillola sull'uso di JDBC... antecedente l'avvento di Java 5...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ah ecco, questo infatti spiega molte cose. Come l'utilizzo di Vector al posto di Vector<E>

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.