tresanti82 ha scritto:
Ma se mi dici che la classe è tutta da rifare la rifaccio, Dunque:
Come la faresti tu? Mi scriveresti la struttura di come potrebbe essere corretta una classe Database? NO CODICE!!
Come farlo dipende da diversi fattori. Oltretutto nelle applicazioni stand-alone in Swing o JavaFX che sia, raramente si usano meccanismi di
dependency injection, quindi è meno facile/pratico gestire le dipendenze tra le classi.
Si potrebbe pensare innanzitutto ad una classe Database che si occupa SOLO della connection (e niente query specifiche!) verso il DB, realizzandola secondo il pattern Singleton (ovvero se ne può avere UNA sola istanza).
Quindi:
- costruttore privato
- metodo statico pubblico per tirar fuori la istanza.
In questo modo si potrebbe fare in modo che: a) il Class.forName si fa una volta sola (non ad ogni query!) e b) la Connection viene creata "on demand" solo quando necessario.
Per ottenere la connection quindi si dovrebbe fare es.:
Connection conn = Database.getInstance().getConnection();
(getInstance() metodo tuo statico, getConnection() metodo tuo di istanza che usa il DriverManager.getConnection).
Poi visto che Database NON fa query, puoi fare una classe "DAO" (Data Access Object) per ciascuna entità che devi trattare. Ad esempio per il vino, VinoDAO
public class VinoDAO {
public String getVini() {
Connection conn = Database.getInstance().getConnection();
// .... tua query ecc...
return ...... ;
}
}
Ho lasciato String, quella stringa in cui componi name e qt, perché non ho (ovviamente) una visione maggiore/migliore della tua applicazione e quindi non so cosa vuoi fare e perché. Diciamo che comporre una stringa così non è molto buono. Innanzitutto perché la composizione è "mischiata" nel codice che fa la estrazione dal ResultSet, quindi stai mescolando logica di estrazione con il concetto di presentazione dei dati. Non molto buono ...
Io ti proporrei di creare una classe Vino che "modella" la tabella vino e quindi di restituire una lista di oggetti Vino.
public List<Vino> getVini()
Sempre che non lo ritieni "troppo" per te e per le tue necessità. Poi chi userà il getVini() dovrà formattare la stringa, se vuole.
tresanti82 ha scritto:
Ottieni la informazione dal toString() dell'oggetto database (pessima idea)
Come mai è una pessima idea?? e quale sarebbe la maniera migliore??
Pessima perché la tua classe database di prima rappresentava comunque la gestione del database in generale e quindi fare in modo che un suo oggetto rappresenti il risultato di una query (e oltretutto fornito dal toString() .... è un uso un po' distorto degli oggetti.
tresanti82 ha scritto:
c) La tua SELECT non ha un ORDER BY quindi i dati sono ordinati a muzzo (idea non buona)
Dimenticanza che avrei sistemato nel momento del bisogno.
Ok