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

    impossibile invocare un metodo

    salve a tutti, scusate l'ignoranza ma perchè se io ho es. la classe GestioneCd al cui interno ho scritto:

    DistributoreDB mt =new DistributoreDB();
    mt.trova();

    in modo da richiamare un metodo che sta nella classe DistributoreDB che si chiama trova();

    perchè mi da come errore:

    GestioneCd.java:84: cannot find symbol
    symbol : constructor DistributoreDB()
    location: class DistributoreDB
    DistributoreDB mt= new DistributoreDB();

    dove è che sbaglio, se volete vi posto il codice.
    ciao e grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Come il compilatore ti stà dicendo chiaramente, il problema non è nell'invocazione del metodo, ma nella costruzione dell'oggetto.
    Tu lo costruisci utilizzando il costruttore vuoto, che, evidentemente, non esiste nella classe DistributoreDB.


    I messaggi del compilatore sono chiarissimi. Se ti dice
    GestioneCd.java:84: cannot find symbol
    symbol : constructor DistributoreDB()
    location: class DistributoreDB
    DistributoreDB mt= new DistributoreDB();
    significa che il problema stà nel costruttore, non in un altro metodo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ciao lele, grazie della risposta ma cmq il costruttore esiste e come nella classe DistributoreDB e mi gestisce la connessione al database

    codice:
     public DistributoreDB(String driver, String dbUrl) 
            	throws SQLException,ClassNotFoundException {
                    Class.forName(driver);//carica il driver
                    c=DriverManager.getConnection(dbUrl);//carica il nome del database
            }
    quindi per quello non capisco quell'errore..

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da superpisu
    codice:
     public DistributoreDB(String driver, String dbUrl) 
            	throws SQLException,ClassNotFoundException {
                    Class.forName(driver);//carica il driver
                    c=DriverManager.getConnection(dbUrl);//carica il nome del database
            }
    Se il costruttore è solo questo, allora il costruttore no-arg (senza argomenti) non esiste. Quindi mi sembra chiaro che se vuoi istanziare un DistributoreDB, devi passare al costruttore le 2 stringhe richieste.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Originariamente inviato da andbin
    Se il costruttore è solo questo, allora il costruttore no-arg (senza argomenti) non esiste. Quindi mi sembra chiaro che se vuoi istanziare un DistributoreDB, devi passare al costruttore le 2 stringhe richieste.
    Che, mi pare, è quello che ho detto io prima...

    Originariamente inviato da LeleFT
    Tu lo costruisci utilizzando il costruttore vuoto, che, evidentemente, non esiste nella classe DistributoreDB
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    ma scusate, ma una classe può avere più di un costruttore?

    quindi nel mio caso, che devo fare..

    se in GestioneCd ho questa situazione:

    codice:
    DistributoreDB mt= new DistributoreDB(//se proprio è necessario,qui cosa gli devo passare);
    mt.trova();
    e in DistributoreDB ho questa:

    codice:
    public DistributoreDB(String driver, String dbUrl) //il costruttore
            	throws SQLException,ClassNotFoundException {
                    Class.forName(driver);//carica il driver
                    c=DriverManager.getConnection(dbUrl);//carica il nome del database
            }
          
            
             public  VociSupporti[] trova() {//voglio richiamare questo metodo
                    Statement s=null;
                    ResultSet rs=null;
                    
                    try {
                          
                            s=c.createStatement();
                            rs=s.executeQuery("SELECT TITOLO,AUTORE,DIMENSIONE  FROM PRODOTTO WHERE SUPPORTO=' ' ORDER BY DIMENSIONE DESC");
    
                            Vector voci= new Vector();
    		        VociSupporti vcd;
    
                            String titolo,autore;
    		        int dimensione;
                            while (rs.next()) {
    								
    				titolo=rs.getString("TITOLO");
    				autore=rs.getString("AUTORE");
                                    dimensione=rs.getInt("DIMENSIONE");
                                    vcd=new VociSupporti(titolo,autore,dimensione); 
                                    voci.addElement(vcd);
                            }
                            VociSupporti[] risultato=new VociSupporti[voci.size()];
                            for (int i=0; i<risultato.length; i++) {
                                    risultato[i]=(VociSupporti) voci.get(i);
                            }
                           
                            return risultato;
                    }
                    catch (SQLException e) {
                            visualizzaEccezioneSQL(e);
                           
                            return new VociSupporti[0];
                    }
                  
                    finally {
                            try {
                                    if (rs!=null) {
                                            rs.close();
                                            rs=null;
                                    }
                                    if (s!=null) {
                                            s.close();
                                            s=null;
                                    }
                            }
                            catch (SQLException e) {
                                    visualizzaEccezioneSQL(e);
                            }
                    }
            }

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da superpisu
    ma scusate, ma una classe può avere più di un costruttore?
    Certo!!
    Una classe ha sempre comunque in ogni caso almeno 1 costruttore. Se il programmatore non ne definisce almeno uno, il compilatore definisce un costruttore di "default" di tipo no-arg, che ha lo stesso livello di accesso della classe e che contiene solo una chiamata super().
    Se il programmatore scrive almeno 1 costruttore, il costruttore di default non viene inserito.

    Originariamente inviato da superpisu
    quindi nel mio caso, che devo fare..

    se in GestioneCd ho questa situazione:

    DistributoreDB mt= new DistributoreDB(//se proprio è necessario,qui cosa gli devo passare);
    mt.trova();
    Qui dipende da quale DBMS stai usando (e non lo posso sapere io). Se fosse MySQL, allora il driver sarebbe "com.mysql.jdbc.Driver" e il url dovrebbe essere una cosa del tipo "jdbc:mysql://nomehost/nomedb".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    grazie andbin infatti gli ho passato i parametri e funziona, sto usando un database access.
    volevo fare solo un ultima modifica che alla fine era quella che mi serviva e cioè questa:

    partendo sempre da GestioneCd io voglio richiamare sempre lo stesso metodo trova() però adesso non direttamente chiamando DistributoreDB, ma passando per questa classe

    codice:
    classe DistributoreMT
    
    public interface DistributoreMT {
    	
    	public  VociSupporti[] trova();//questo metodo è implementato in DistributoreDB
    	
    }
    DistributoreDB è fatto così:

    codice:
    public class DistributoreDB implements DistributoreMT {
            
            
            
            //parametri necessari alla connessione al database, 
                    
            private static final String dbDriverName = "sun.jdbc.odbc.JdbcOdbcDriver";
            private static final String dbUrl ="jdbc:odbc:db";
            
    
            /*
                    se impostato a true l'applicazione notifica all'utente 
                    le situazioni d'errore
            */
            private static boolean visualizzaEccezioni = true;
    
            private Connection c=null;
            
            /*
                 istanzio i driver e creo una connessione. Nel caso che una di
                 queste operazioni non vada a buon fine genera un'eccezione
            */
            public DistributoreDB(String driver, String dbUrl) 
            	throws SQLException,ClassNotFoundException {
                    Class.forName(driver);//carica il driver
                    c=DriverManager.getConnection(dbUrl);//carica il nome del database
            }
            
            
             public  VociSupporti[] trova() {//metodo che mi serve
                    Statement s=null;
                    ResultSet rs=null;
    .......
    
    ........
    
    .....ecc ecc
    come cambio adesso l'invocazione del metodo trova() nella classe GestionCd.
    grazie in anticipo andbin, mi stai dando una grossa mano.

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.