Visto che la query ti può ritornare + di un record io il ProdottiDTO lo istanzierei all'interno del while farei come hai fatto i set e poi lo aggiungerei a un ArrayList<ProdottiDTO> tipizzato.
Così avrò una lista di ProdottiDTO che non è altro che il risultato della query.
Per capirci

codice:
public ArrayList<ProdottiDTO > datiMagazzino (){
         connetto();//metodo di connessione al db
         List<ProdottiDTO> lista = new ArrayList<ProdottiDTO>();
         try{
	sql = "SELECT * FROM prodotti";
	Statement stmt = db.createStatement();
	ResultSet rs = stmt.executeQuery(sql);//eseguo la query
	while (rs.next()){
            //ciclo i dati recuperati dal result set
            //carico tutti i dati presi all'interno delle variabili dell'oggetto istanziato
                ProdottiDTO setProdotto = new ProdottiDTO();
               //oggetto della classe prodotti contenente i get() e set()
				
               setProdotto.setCodiceProdotto(rs.getString("codiceprodotto"));
	  setProdotto.setNomeProdotto(rs.getString("nomeprodotto"));
               setProdotto.setDescrizione(rs.getString("descrizione"));
               lista.add(setProdotto);
	}
          }catch (Exception e){
	System.out.println(e.getMessage());
          }	
return lista;
}