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;
}