Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] query su tabelle multiple

    Ragazzi ho un problema assurdo (per me incomprensibile), faccio una query su + tabelle, da questa query "dovrebbe" risultare un vettore con 5 elementi, invece il vettore viene caricato solo del primo elemento, mi sapete aiutare?????


    codice:
    String query= "SELECT aule.nome, prenotazioni.giorno, prenotazioni.ora_inizio, prenotazioni" +
    	    ".ora_fine, prenotazioni.note FROM prenotazioni JOIN prenotazioni_eff ON prenotazioni.`#prenotazione`="+
    	    "prenotazioni_eff.`#prenotazione` JOIN aule ON prenotazioni_eff.`#aula`=aule.`#aula`" +
    	    "JOIN docenti ON prenotazioni_eff.`#docente`=docenti.`#docente` "+
    	    " WHERE docenti.`#docente`=\""+ getId_docente(username)+"\" AND aule.nome=\""
    	    +(String.valueOf(dati.elementAt(0)))+"\" AND prenotazioni.giorno=\""
    	    +(String.valueOf(dati.elementAt(1)))+"\";";
    		Vector v = new Vector();
    		System.out.println(query);
    		v = (Vector)database.leggi(query).clone();
    		System.out.println(v.size());
    		for (int i=0; i<v.size(); i++) {
    		     String record = ((String[])  v.elementAt(i))[0];;
    		     System.out.println(record);
    		}

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

    Re: [JAVA] query su tabelle multiple

    Originariamente inviato da Reddragoon
    Ragazzi ho un problema assurdo (per me incomprensibile), faccio una query su + tabelle, da questa query "dovrebbe" risultare un vettore con 5 elementi, invece il vettore viene caricato solo del primo elemento, mi sapete aiutare?????
    Scusa ma quel leggi() che cosa ritorna? Dal codice intuisco un Vector in cui ogni elemento è un array di String (per le colonne). Giusto? Tu allora adesso stai stampando solo la prima colonna.

    Quindi quale è il problema esatto? Vuoi che stampi le altre colonne?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    allora il codice di leggi è questo
    codice:
    public static Vector leggi(String query) {
         Vector v = null;
         String [] record;
         int colonne = 0;
         try {
            Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
            ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
            v = new Vector();
            ResultSetMetaData rsmd = rs.getMetaData();
            colonne = rsmd.getColumnCount();
    
            while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
               record = new String[colonne];
               for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
               v.add((String[]) record.clone());
            }
            rs.close();     // Chiudo il ResultSet
            stmt.close();   // Chiudo lo Statement
         } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
    
         return v;
      }
    la cosa che non capisco è che se faccio una query del genere select * from tabella1, mi prende tutte le colonne, non capisco cosa ci sia di differente da questo

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reddragoon
    allora il codice di leggi è questo
    Ad occhio mi sembra corretto. Vabbè ... alcune cose sono superflue/inutili (il cast a String[] e il clone() dell'array) ma dovrebbe essere ok.

    Originariamente inviato da Reddragoon
    la cosa che non capisco è che se faccio una query del genere select * from tabella1, mi prende tutte le colonne, non capisco cosa ci sia di differente da questo
    Non dovrebbe esserci alcuna differenza.

    Nel codice all'inizio stampavi solo la prima colonna:

    String record = ((String[]) v.elementAt(i))[0];;

    Se estrai dal Vector l'array e fai un ciclo for, le stampa le colonne?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    allora, ho provato a fare come dicevi tu ed effettivamente funziona quindi la string mi diventa
    String record = ((String[]) database.leggi(query).elementAt(0))[1];
    io voglio ottenere un vettore con campo1->dato1, campo2->dato2, ecc...però questi dati devono essere stringhe, come posso fare?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reddragoon
    allora, ho provato a fare come dicevi tu ed effettivamente funziona quindi la string mi diventa
    String record = ((String[]) database.leggi(query).elementAt(0))[1];
    io voglio ottenere un vettore con campo1->dato1, campo2->dato2, ecc...però questi dati devono essere stringhe, come posso fare?
    No alt.

    codice:
    Vector v = database.leggi(query);
    
    for (int i = 0; i < v.size(); i++)
    {
        String[] colonne = (String[]) v.get(i);   // prende l'array delle colonne per la riga i-esima
    
        for (int col = 0; col < colonne.length; col++)
            System.out.print(colonne[col] + " ");
    
        System.out.println();
    }
    Questo sarebbe il modo logico (e corretto) di leggere tutte le colonne di tutte le righe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    grazie moltissimo, finalmente ho capito

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.