Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    11

    Collegamento attributi di una classe che riflettano il database

    Salve a tutti avrei il problema di creare un collegamento tra diversi attributi di una classe che riflettano i risultati di una Query...Mi spiego meglio...
    immaginiamo io abbia come risultato di una query Prodotto Taglia Quantita Data_consegna ...
    ora io avrò i relativi attributi prodotti,taglie,date consegna,costi.Una prima soluziione a cui ho pensato è di tipo posizionale (con attributi ArrayList) nel senso che ad ogni riga della query aggiungo i valori ai vari attributi.Così però avrei valori duplicati ad esempio lo stesso tipo di prodotto nell' attributo prodotto(se si ripete nelle riga dell risultato della query).Se nn volessi fare cosi(duplicare i valori negli ArrayList e quindi basarmi semplicemente sulle posizioni) dovrei stabilire molteplici collegamenti tra gli attributi,cioè collegare prodotto alla taglia che a sua volta va legato alla quantita e alla data consegna...In quest'ultimo caso quale struttura dati dovrei usare? Ho visto un pò le Hashmap ma queste mi permettono solo collegamenti binari del tipo chiave valore....Grazie per le risposte!

  2. #2
    Originariamente inviato da maxcady
    Salve a tutti avrei il problema di creare un collegamento tra diversi attributi di una classe che riflettano i risultati di una Query...Mi spiego meglio...
    immaginiamo io abbia come risultato di una query Prodotto Taglia Quantita Data_consegna ...
    ora io avrò i relativi attributi prodotti,taglie,date consegna,costi.Una prima soluziione a cui ho pensato è di tipo posizionale (con attributi ArrayList) nel senso che ad ogni riga della query aggiungo i valori ai vari attributi.Così però avrei valori duplicati ad esempio lo stesso tipo di prodotto nell' attributo prodotto(se si ripete nelle riga dell risultato della query).Se nn volessi fare cosi(duplicare i valori negli ArrayList e quindi basarmi semplicemente sulle posizioni) dovrei stabilire molteplici collegamenti tra gli attributi,cioè collegare prodotto alla taglia che a sua volta va legato alla quantita e alla data consegna...In quest'ultimo caso quale struttura dati dovrei usare? Ho visto un pò le Hashmap ma queste mi permettono solo collegamenti binari del tipo chiave valore....Grazie per le risposte!
    Senza volerti offendere, la tua domanda lascia sospettare che tu abbia poco chiara la relazione fra un modello ad oggetti ed un database relazionale.
    In generale le query non andrebbero fatte "a casaccio" ma finalizzate al popolamento di oggetti del modello.
    Nel tuo caso se tu hai una tabella prodotto questa (nella mente di chi ha scritto il database) è quasi certamente l'implementazione su db relazionale di un'entità Prodotto cui deve corrispondere una classe Prodotto e degli oggetti istanze di tale classe. Sempre cercando di mantenerci sul tuo esempio tu dovresti scrivere una classe del tipo:
    codice:
    public class Prodotto
        {
    	private Long id;
    	private Long taglia;
    	private Long quantita;
    	private Date data_consegna;
    
    	public long getId() {
    	    return id;
    	}
    	public void setId(long id) {
    	    this.id = id;
    	}
    	public long getTaglia() {
    	    return taglia;
    	}
    	public void setTaglia(long taglia) {
    	    this.taglia = taglia;
    	}
    	public long getQuantita() {
    	    return quantita;
    	}
    	public void setQuantita(long quantita) {
    	    this.quantita = quantita;
    	}
    	public Date getData_consegna() {
    	    return data_consegna;
    	}
    	public void setData_consegna(Date dataConsegna) {
    	    data_consegna = dataConsegna;
    	}
    
        }
    poi fare la tua query, sulla base di qualche filtro (che può anche essere nessuno, cioè restituisci tutti i record della tabella) ottenendo un resultSet (immagino che tu usi JDBC ). A questo punto cicli tutti gli elementi del resultset e leggi i suoi campi uno per uno scrivendoli sugli attributi di oggetti Prodotto e ottenendo una lista di lunghezza pari ai record restituiti dalla query. Una cosa del tipo:
    codice:
    public List<Prodotto> retrieveProducts(){
    	List<Prodotto> products = new ArrayList<Prodotto>();
    	Connection con = getConnection();
    	String selectString = "select * from prodotto";
    	try {
    	    stmt = con.createStatement();
    	    ResultSet rs = stmt.executeQuery(selectString);
    	    while (rs.next()) {
    		Prodotto prodotto = new Prodotto();
    		prodotto.setId(rs.getLong("id"));
    		prodotto.setTaglia(rs.getLong("taglia"));
    		prodotto.setQuantita(rs.getLong("quantita"));
    		prodotto.setData_consegna(rs.getDate("data_consegna"));
    		products.add(prodotto);
    	    }
    	    stmt.close();
    	    con.close();
    
    	} catch(SQLException ex) {
    	    System.err.println("SQLException: " + ex.getMessage());
    	}
    	return products;
        }
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    11
    mmmm grazie per la risposta anche se credo tu abbia semplificato un pò troppo ....diciamo che io per adesso so progettare bene un database, mentre in Java sono un principiante, però la critica che mi è stata mossa sin dall' inizio da chi mi sta insegnando è che io lego troppo i miei ragionamenti al database, ora tu mi stai dicendo l' esatto contrario...a questo punto non so che pesci prendere ...ho capito quello che dici anche perchè un ragionamento come il tuo mi semplificherebbe parecchio le cose nel senso di associare in pratica ogni classe ad ogni entità o relazione e istanziare gli attributi...diciamo che ogni classe che ho creato è nata da fasi di progettazione come casi d'uso,Crc ecc ...

  4. #4
    Originariamente inviato da maxcady
    mmmm grazie per la risposta anche se credo tu abbia semplificato un pò troppo ....diciamo che io per adesso so progettare bene un database, mentre in Java sono un principiante, però la critica che mi è stata mossa sin dall' inizio da chi mi sta insegnando è che io lego troppo i miei ragionamenti al database, ora tu mi stai dicendo l' esatto contrario...a questo punto non so che pesci prendere ...ho capito quello che dici anche perchè un ragionamento come il tuo mi semplificherebbe parecchio le cose nel senso di associare in pratica ogni classe ad ogni entità o relazione e istanziare gli attributi...diciamo che ogni classe che ho creato è nata da fasi di progettazione come casi d'uso,Crc ecc ...
    In realtà io non ti sto affatto dicendo l'esatto contrario...semplicemente non conosco il contesto esatto e le tue reali nozioni di progettazione di un database, quindi ho preferito farti un esempio semplice (anche per questioni di tempo, data la vastità della materia). Tu dici di saper progettare molto bene un database, ebbene per progettarne uno dovresti partire dando forma ad un Modello E/R e poi tradurre quest'ultimo in un Modello relazionale , implementandolo infine con l'sql su qualche DBMS.
    Come puoi notare il Modello E/R fa riferimento a concetti come Entità, Associazioni, Attibuti di entità, Attributi di associazioni, generalizzazioni...tutti immediatamente (o quasi) riproducibili in un modello ad oggetti (in Java ma anche in C++ o in generale in un linguaggio Object Oriented). Questo per dire che in realtà il modello dei dati è unico (ed è rappresentato dal diagramma ER) e i due modelli ad oggetti e relazionale sono solo le due implementazioni di esso rispettivamente sul tuo software e sul DBMS. Il codice che scrivi per estrarre i dati dal database in altre parole deve solo essere un meccanismo perché i due modelli "si parlino" e cioè un modo di tradurre i dati in un modello nell'altro.
    Se ti è stata mossa la critica "lego troppo i miei ragionamenti al database" è probabilmente perché tu cerchi di saltare la modellazione ER passando direttamente a quella relazionale (e trascurando completamente quella ad oggetti) pur facendo il passo più lungo della gamba perché questo richiede una capacità di astrazione maggiore.
    Concludo dicendo che, al giorno d'oggi, quasi tutti i grossi applicativi fanno uso di frameworks perl la "traduzione" dal modello relazionale al modello ad oggetti, il più famoso fra tutti è Hibernate che non a caso è in incluso nella categoria degli ORM (Object Relational Mapping). Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    11
    no bè diciamo che su sql sono abbastanza ferrato nel senso che ho fatto un intero esame con progetto relativo ,schema er, modello relazionale, normalizzazione ecc... la materia dove sono ancora "debole" è la programmazione ad oggetti, sono ancora un databasista piu che un ingegnere del software .Io addrittura ho abbandonato hibernate proprio per il timore di legare troppo classi con le entità/relazioni.Cmq il progetto è troppo vasto mi rendo conto che è difficile spiegarmi bene, per ora ho preso spunto diciamo aggiungendo una classe che "legasse meglio" gli attributi tra loro, ovvero ho aggiunto la classe prodotto ...

  6. #6
    Originariamente inviato da maxcady
    no bè diciamo che su sql sono abbastanza ferrato nel senso che ho fatto un intero esame con progetto relativo ,schema er, modello relazionale, normalizzazione ecc... la materia dove sono ancora "debole" è la programmazione ad oggetti, sono ancora un databasista piu che un ingegnere del software .Io addrittura ho abbandonato hibernate proprio per il timore di legare troppo classi con le entità/relazioni.Cmq il progetto è troppo vasto mi rendo conto che è difficile spiegarmi bene, per ora ho preso spunto diciamo aggiungendo una classe che "legasse meglio" gli attributi tra loro, ovvero ho aggiunto la classe prodotto ...
    Il mio suggerimento è di ragionare sul database (dato che c'è quello c'è già) e tentare di astrarre da esso il modello ad oggetti corrispondente, se non riesci in maniera diretta passa per il diagramma E/R. Una volta scritto un modello a oggetti consistente, con classi come Prodotto, Categoria eccetera, in cui ad esempio un Prodotto ha come attributo una lista di categorie (è solo un esempio), passare al popolarlo a partire da query opportune è quasi immediato a mio avviso. Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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.